算法017:二分查找

二分查找. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/

二分查找,其实是双指针的一种特殊情况,但是时间复杂度极低,仅为𝑂(log⁡𝑛),但是二分查找对于数组的要求必须是有序数组才可以。

我们定义一个左指针和右指针,同时把mid设置程left和right的中间值

  1. 先让mid处的数字和target相比较
  2. 如果是 mid > target,说明需要找的值比mid要小,区间在left到mid之间,此时把right指针换到mid的左边,这样就能完成对一般的筛选。
  3. mid < target则是一样的,只不过翻了过来,把left指针换到mid的右边

当mid处的值和target相等的时候,返回mid处的值。

最终当left > right时,停止循环。如停止循环,则说明没有想要找的值。

另外有一个小细节:

在确定mid的值的时候,为了防止数字太大溢出,不能直接用left + right再除以二这样的方式,而最好用 left + (right - left) / 2这样的方式,只要右指针不超过最大值,那么mid的值就是有效的。

代码:

java 复制代码
class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        while(left <= right){
            int mid = left + (right - left) / 2;
            if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid - 1;
            }else{
                return mid;
            }
        }
        return -1;
    }
}
相关推荐
Sheep Shaun4 分钟前
二叉搜索树(下篇):删除、优化与应用
数据结构·c++·b树·算法
极简车辆控制6 分钟前
基于LQR全主动七自由度全车悬架车身姿态控制
算法
s090713613 分钟前
常用FPGA实现的图像处理算法
图像处理·算法·fpga开发
core51221 分钟前
SVM (支持向量机):寻找最完美的“分界线”
算法·机器学习·支持向量机·svm
TG:@yunlaoda360 云老大42 分钟前
华为云国际站代理商的DDM支持哪些拆分算法?
数据库·算法·华为云
qq_430855881 小时前
线代第二章矩阵第五、六、七节矩阵的转置、方阵的行列式、方阵的伴随矩阵
线性代数·算法·矩阵
C雨后彩虹1 小时前
5G网络建设
java·数据结构·算法·华为·面试
机器学习之心1 小时前
最小二乘支持向量机(LSSVM)结合遗传算法(GA)解决单目标优化问题,MATLAB代码
算法·支持向量机·matlab·单目标优化问题
没有故事的Zhang同学2 小时前
09-🔍数据结构与算法核心知识 | 二叉搜索树:有序数据结构理论与实践
算法
不穿格子的程序员2 小时前
从零开始写算法——二叉树篇3:对称二叉树 + 二叉树直径
算法