算法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;
    }
}
相关推荐
春日见1 小时前
丝滑快速拓展随机树 S-RRT(Smoothly RRT)算法核心原理与完整流程
人工智能·算法·机器学习·路径规划算法·s-rrt
Code小翊1 小时前
”回调“高级
算法·青少年编程
云里雾里!1 小时前
力扣 977. 有序数组的平方:双指针法的优雅解法
算法·leetcode·职场和发展
一只侯子4 小时前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
jianqiang.xue4 小时前
别把 Scratch 当 “动画玩具”!图形化编程是算法思维的最佳启蒙
人工智能·算法·青少年编程·机器人·少儿编程
不许哈哈哈5 小时前
Python数据结构
数据结构·算法·排序算法
J***79395 小时前
后端在分布式系统中的数据分片
算法·哈希算法
sin_hielo7 小时前
leetcode 2872
数据结构·算法·leetcode
dragoooon347 小时前
[优选算法专题八.分治-归并 ——NO.49 翻转对]
算法
AI科技星7 小时前
为什么宇宙无限大?
开发语言·数据结构·经验分享·线性代数·算法