算法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;
    }
}
相关推荐
m0_466525297 分钟前
从“算法内卷”到“可信易用” 东软多模态医学人工智能平台开启无代码科研新时代
人工智能·算法
码少女29 分钟前
数据结构——冒泡排序及优化
数据结构·算法·排序算法
梦回江东43 分钟前
ansible中的主机清单
算法
青梅橘子皮1 小时前
string---入门OJ题(1)
数据结构·算法
qq_454245031 小时前
BasicMethod.Map 设计框架:8 个并行基础模块的数学根基与实现
数据结构·算法·c#
青山木1 小时前
Hot 100 --- 二叉树与递归
java·数据结构·算法·leetcode·深度优先
珠海西格电力2 小时前
数据采集与治理:零碳园区管理系统的 “生命线”
大数据·人工智能·算法·架构·能源
●VON2 小时前
HarmonyKit | 鸿蒙新特性:router 导航 API 从 pushUrl 到 UIContext 的演进
算法·华为·交互·harmonyos
星释2 小时前
鸿蒙智能体开发实战:31.鸿蒙壁纸大师 - 环境搭建与基础配置
算法·华为·ai·harmonyos·鸿蒙
ysa0510302 小时前
【板子】树上启发式合并
数据结构·c++·笔记·算法