【算法】二分查找——二分查找

news2024/11/17 9:37:43

本节博客详述“二分查找”并且以例子来进行讨论,有需要借鉴即可。

目录

  • 1.二分查找
    • 1.1使用前提
    • 1.2模板
  • 2.题目
  • 3.题解代码示例
  • 4.二分查找的一般模板
  • 5.总结

1.二分查找

1.1使用前提

使用的条件:数组具有“二段性,二段性指的是数组可以根据某一规律分为两组,且在干掉一半之后仍可以对另一半进行复用相同的规律。

1.2模板

二分查找的代码具有高度统一性,因而可以套用模板,但这并不意味着自己不需要用脑子无脑套模板。

一般二分查找模板、查找左边界二分模板、查找右边界二分模板。

下面是通过一道具体的题目来介绍二分查找算法的由来。

2.题目

题目链接:LINK
在这里插入图片描述
首先肯定是暴力解法,挨个遍历就行了,找到了返回对应的下标,找不到返回-1

但是这个暴力解法有点慢,慢就慢在一次只能干掉一个数字。

有序数组满足“二段性”,这里的“二段性”就是以某个数字作比较,可以将数组分为比这个数字大的一组和小的一组,因而可以利用有序的特点直接上二分查找算法。
在这里插入图片描述

思考:结束条件是什么?
答:left <= right,这个等于一定要注意,因为一个数字也要判断一下。
不然会出下以下“悲剧”:
在这里插入图片描述

思考:为什么一定得二分,而不是三分、四分…N分?
答:这里推一篇文章,有兴趣可以看一下:LINK

二分查找复杂度
答:logN在这里插入图片描述

3.题解代码示例

class Solution {
public:
    int search(vector<int>& nums, int target) 
    {
        //一般情况
        for(int left = 0,right = nums.size() - 1,mid; left <= right;)
        {
            //mid = (left + right) / 2;
            mid = left + (right - left) / 2;//优化,防止两数相加溢出问题
            if(nums[mid] > target)right = mid - 1;
            else if(nums[mid] < target)left = left + 1;
            else return mid;
        }

        return -1;
    }
};

4.二分查找的一般模板

while(left < right)
{
int mid = left + (right - left) / 2;
if(...)
//
else if(...)
//
else
return ...
}

5.总结

我感觉二分查找大部分人是比较熟悉的,这里需要注意两个点,为什么是二分?二分查找的使用前提一定是有序吗?

题目太简单,不多说。


EOF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1676327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024 年 4 月区块链游戏研报:市场低迷中活跃用户数创新高

2024 年 4 月区块链游戏研报 作者&#xff1a;stellafootprint.network 数据来源&#xff1a;GameFi 研究页面 2024 年 4 月&#xff0c;Web3 游戏领域在经历 3 月创纪录的表现后&#xff0c;迎来了显著波动。比特币自历史高位回调&#xff0c;月跌幅达到 10.4%。与此同时&a…

详细分析Vue3中的ref(附Demo)

目录 前言1. 基本知识2. Demo 前言 由于新项目涉及Vue3&#xff0c;本着探究问题的本质研究所不会的疑问 1. 基本知识 ref 是 Vue 3 中用于创建响应式数据的函数 接收一个初始值并返回一个包含了该值的响应式引用对象与 Vue 2.x 中的 data 属性不同&#xff0c;ref 返回的是…

Navicat Premium安装pojie版

下载、安装mysql&#xff0c;环境变量配置 1、官网下载mysql&#xff1a;https://www.mysql.com/downloads/ 下载成功&#xff0c;进行安装 一直点下一步 验证&#xff0c;开始中搜索mysql 说明安装成功 环境变量配置 默认安装路径C:\Program Files\MySQL …

2024年高考倒计时精品网页

2024年高考倒计时精品网页 前言效果图部分代码领取源码下期更新预报 前言 随着季风轻轻掠过&#xff0c;岁月如梭&#xff0c;再次迎来了这个属于青春与梦想交汇的时刻——高考。这是一场知识的较量&#xff0c;更是一次意志的考验。在这最后的冲刺阶段&#xff0c;每一刻都显…

Vision Mamba 代码调试---Pycharm+AutoDL

《AutoDL使用手册》 1. 服务器租用与配置 先上项目链接&#xff1a; GitHub - hustvl/Vim: Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 1.1 服务器租用与配置 根据环境要求&#xff0c;去租一个服务器&#xff1a;AutoDL算…

一文读懂通用漏洞评分系统CVSS4.0:顺带理清CVE、CWE及其与CVSS之间的关系

事件响应和安全团队论坛 (FIRST&#xff0c;Forum of Incident Response and Security Teams) 于 2023 年 11 月 1 日正式推出第四版通用漏洞评分系统 (CVSS 4.0&#xff0c;Common Vulnerability Scoring System version 4.0)。CVSS 4.0 是评估计算机系统安全漏洞严重性的行业…

初次查询大数据信用报告,需要注意哪些问题?

随着大数据的普及&#xff0c;基于大数据技术的大数据信用也变得越来越重要&#xff0c;比如在申贷之前&#xff0c;不少地方都会查询申贷人的大数据信用&#xff0c;作为风险控制的必要手段&#xff0c;那对于初次查询大数据信用报告的人来说&#xff0c;需要注意哪些问题呢?…

干部选拔任用的重要性与实践策略

在当今的组织管理中&#xff0c;干部选拔任用是一项至关重要的工作。它不仅关系到组织的稳定与发展&#xff0c;更直接影响到组织的效能和竞争力。因此&#xff0c;科学、公正、有效的干部选拔任用机制对于组织的长期健康发展具有不可忽视的意义。 一、干部选拔任用的重要性 …

产品经理资料包干货

1.《产品汪》免费电子书 2016年我面试了差不多有200多位产品求职者&#xff0c;其中不乏之前做厨师编剧这些岗位的人。在这个过程中我意识到大众或许对产品经理这个岗位存在一些认知和理解上的误差&#xff0c;于是我就想着写一本产品经理相关的书。 关于本书的更多信息可查看…

研究生学习---找工作

规划 研一~研二上学期完成小论文&#xff0c;实习&#xff0c;秋招 竞赛&#xff1a;kaggle&#xff1f; 面试题一般简单且为原题&#xff0c;笔试题目很难&#xff0c;不会出原题 项目 找工作软件

webapi路由寻址机制

路由匹配的原则 1、启动 Application_Start 文件夹中有个WebApiConfig 会把路由规则写入一个容器 2、客户端请求时&#xff1a; 请求会去容器匹配&#xff0c;先找到控制器&#xff08;找到满足的&#xff0c;就转下一步了&#xff09;&#xff0c;然后找Action&#xff0c;we…

菲律宾签证照片尺寸要求,用手机生成

菲律宾签证照片尺寸要求如下图所示&#xff0c;可以用手机在微信搜索随时照小程序&#xff0c;快速生成哦。

MIT 6.5840(6.824) Lab1:MapReduce 设计实现

1 介绍 本次实验是实现一个简易版本的MapReduce&#xff0c;你需要实现一个工作程序&#xff08;worker process&#xff09;和一个调度程序&#xff08;coordinator process&#xff09;。工作程序用来调用Map和Reduce函数&#xff0c;并处理文件的读取和写入。调度程序用来协…

IPsec VPN简介

什么是IPsec&#xff1f; IPsec&#xff08;Internet Protocol Security&#xff09;是为IP网络提供安全性的协议和服务的集合&#xff0c;它是VPN&#xff08;Virtual Private Network&#xff0c;虚拟专用网&#xff09;中常用的一种技术。其实就是一种协议簇&#xff08;类…

linux 任务管理(临时任务定时任务) 实验

目录 任务管理临时任务管理周期任务管理 任务管理 临时任务管理 执行如下命令添加单次任务&#xff0c;输入完成后按组合键Ctrl-D。 [rootopenEuler ~]# at now5min warning: commands will be executed using /bin/sh at> echo "aaa" >> /tmp/at.log at&g…

中国目前比较有影响力的人物颜廷利:物质与无知通音

既然是在中国优秀传统文化之根-汉语当中&#xff0c;汉字‘物质’二字跟‘无知’通音&#xff0c;因此&#xff0c;面对当前金钱肆虐、物欲横流的现实生活&#xff0c;当人类众生把‘物质’&#xff08;无知&#xff09;生活看的太真、太重时&#xff0c;那么&#xff0c;这就很…

内网渗透—域信息收集防火墙策略同步不出网隧道上线

1、前言 最近在学域渗透方面的知识&#xff0c;这里就记录一下。主要涉及到什么是域&#xff0c;域的信息收集&#xff0c;防火墙的策略同步&#xff0c;以及当主机出网的协议被封杀时如何利用隧道上线。 2、什么是域 域是一个有安全边界的计算机集合&#xff0c;在域内的计…

AcqKnowledge 5.0使用方法

Biopac 数据导入 matlab 处理方法 第一步&#xff1a;在 AcqKnowledge 软件中&#xff0c;将数据通道的 mark 信息导入到 Graph&#xff0c;并将数据存储为 acq3 的格式 第二步&#xff1a;MATLAB中读取acq3文件脚本 clc clear %%%所有被试这一层路径 pathsub fullfile(file…

Milvus 简介与核心特性

一、Milvus 概述 Milvus 是一个开源的向量数据库&#xff0c;由 Zilliz 公司发起并维护。它专为处理非结构化数据而设计&#xff0c;能够存储、检索和分析大量的向量数据。Milvus 的名字来源于拉丁语&#xff0c;意为“一万”&#xff0c;象征着其处理大规模数据集的能力。 M…

【TypeScript】ts中的类型别名(Type)的介绍和使用

简言 类型别名(Type)的介绍和使用。 类型别名特别常用。 类型别名 类型别名就是用关键词type声明的类型&#xff1a; // Name类型 type Name string类型特别简单&#xff0c;他的作用就是定义一个类型的别名&#xff0c;这个类型可以是简单基础类型&#xff0c;也可以是复…