【简单面试题】二分查找算法

二分查找算法以及面试真题

在一组排好序的数组中,找到所求值的索引。

二分查询思想如下:

取左left、右边界right,以及左右边界的中间值index

如果所求的值小于索引index对应的值:

​ 将右边界right赋值为index-1,因为此时index所对应的值是大于所求值num,所以可以直接排除index.

赋值之前:

image-20230109200854459

赋值之后:

image-20230109201824923

如果所求索引的值大于索引值index对应的值:

​ 将左边界left赋值为index+1`,因为此时index所对应的值是小于所求值num,所以可以直接排除index.

赋值之前:

image-20230109201337291

赋值之后:

理论同上,不再画图,可以看下面二分查找的动画:

img

如果index对应的值和num的值相等:

​ 所求值对应的索引就是index.

因为在Java语言中。整数之间的乘除加减最后返回值都是整数,所以在求中间索引时不用担心小数问题。

代码如下:

private static int binarySearch(int[] nums, int target) {
    // 声明左右边界,以及中间索引
    int left = 0, right = nums.length - 1, index;

    while (left <= right) {
        // 计算中间索引位置
        // index = (left + right) / 2;
        // 避免数值超过int最大值
        //  index = left + (right - left) / 2;
        index = (left + right) >>> 1;
        // 如果相等 代表找到了元素索引
        if (nums[index] == target) {
            return index;
        }
        // 如果当前中间值大于要查找的元素 ,让右边界等于索引-1(毕竟索引那里不相等 可以忽略掉)
        if (nums[index] > target) {
            right = index - 1;
        }
        // 如果中间值小于要查找的元素,让左边界等于索引+1
        if (nums[index] < target) {
            left = index + 1;
        }
    }

    return -1;
}

面试题口诀:

1.奇数二分取中间。

2.偶数二分取中间左边

面试题:

  1. 有一个有序表为1,5,8,11,19,22,31,35,40,45,48,49,50 。当二分查找值为48的节点时,查找成功需要比较的次数是?

    image-20230109203422623

  2. 在拥有512个元素的数组中二分查找一个数,需要比较的次数最多不超过多少次。

    解题方法1:

    用512/2/2/2…直到最终等于1,中间除了几次2就是几次。

    解题方法2:

    2^n = 512 ,求解n的值即可。

    解体方法3:

    image-20230109204636675

    ​ 如果结果为整数,即为最终答案。

    ​ 如果是小鼠,则舍弃小数部分,整数再加1,为最终结果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前Facebook工程师 打造王者级课程                            覃超 Facebook 早期员工&多年面试官、曾作为 Facebook Messenger Tech Lead,主导和参与了 Facebook App、Facebook Messenger、Facebook Phone 等产品的研发工作。 现在,覃超老师致力于计算机科学领域的培训指导,经他指导的学生,90%以上拿到了硅谷公司或国内顶级互联网公司的offer。 推动0到3岁程序员 打通职业发展路径 数据结构算法计算机学科知识结构的核心和技术体系的基石,随着科技的飞速发展,数据结构的基础性地位反而更加坚固,是每一个程序员必须掌握的底层核心技能! 多岗位必备技能 快速提升编程内功   作为一名程序员,无论是任何岗位,掌握数据结构算法,就可以在面试前建立自己的算法技术体系,同时有助于更好地阅读源码和设计编写一些复杂的工具,快速提升编程内功! 建立框架性知识体系 覆盖重要知识点 很多人认为可能除了面试,之后再也用不到据结构与算法了,但是如果程序员想拔高一个层次,数据结构算法是很重要的一部分,《全解数据结构算法》帮你完成角色的转变! 透彻讲解底层核心原理 拓展能力上限 很多人认为可能除了面试,之后再也用不到据结构与算法了,但是如果程序员想拔高一个层次,数据结构算法是很重要的一部分,《全解数据结构算法》帮你完成角色的转变!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值