关于二分查找法问题

来源:3-1 从二分查找法看如何写出正确的程序

qq_慕莱坞4316410

2024-12-04

老师,就是有一个问题,就是如果只传一个查找数组,和需要查找的值,l=0,r = 数组的长度 - 1
老师计算中间值的时候,我发现就会出现偏移问题。因为用老师视频的(r-l)/2 程序出现了死循环了,使用debug方式,我发现mid 总是会偏移1位,之前看过老师别的视频有类似的处理 用 l + (r-l + 1) / 2 就完全可以解决,并且也能快速的找到对应的元素。这个就有点迷糊,到底啥时候需要使用偏移,啥时候不用使用。

写回答

1回答

liuyubobobo

2024-12-21

你说的“看过老师别的视频”应该是指我的体系课的内容,我在我的算法体系课中详细介绍过这个问题。


简单来说,如果是二分查找某个值,不存在这个问题;

只有在二分查找上界或者下界的时候(大于或者大于等于 v 的最小值;小于或者小于等于 v 的最大值),才可能出现这个问题,因为此时,二分查找可能出现死循环;

一大出现死循环,使用 l + (r-l + 1) / 2 的方式都可以解决。


是否出现死循环不需要运行程序来判断,通过查看在极端情况 l 和 r 是否可能没有变化就可以。只要 l 和 r 可能不动,就会出现死循环。


更具体的在我的体系课程中有详细介绍,课程中有几个同学的问题也和此相关,我做了详细回答,可以参考。


继续加油!:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7433 学习 · 1159 问题

查看课程