1要考虑四个角度的“边界”,如下图
2 先考虑角度a的第一种情况
如下图所示,对于左边的情况,因为当l=3,r=4的时候,mid等于3,已知target=4, 如果l=mid就陷入死循环,所以l。右边同理。
判断c1 c2的影响,可以参考下边的12个数轴,紫色荧光笔是对应的mid, x就是target,有无表示数组中有没有目标值。经过分析就可以得出上述表格后两行,会发现,不管c1还是c2都不能准确判断有无目标值。因为结果都是while正常结束,l等于r,却可能有也可能没有变量。
3. 所以采取a2,对于a2,同样为了避免死循环,会发现l,r更新只能采取c2方式
4.并且依然是通过数轴算可能的六种情况,发现,
不仅可以准确判断有无变量,并且可以准确的返回对应的变量索引或者变量区间。
向上向下取整本质是一样的,因为他其实就只是做了一个镜像,所以无所谓
我真的觉得太合理了,虽然方法有些笨拙,且不排除哪里粗心算错了,如有朋友发现,欢迎指出。