二分查找的基本思路很简单:
在有序的连续数中标记最中间的数,设其为Mid,并设目标数为Target,将Mid与Target比较(先假设该数组为升序)如果Target大于Mid,说明Mid偏小
那么将left移到Mid,再求出新的Mid,如此往复不断逼近要找的数。
思路很简单,代码实现也不难,但是二分查找非常抠细节
以力扣上的二分查找题为例,简简单单的代码就有三处细节需要处理。
首先是第一处,为什么while的判断条件是left<=right而不是left<right?
如果while的判断条件是left<right,那么当该循环结束时,left与right的情况有两种,第一种是left>right,这种情况毫无疑问,是该数组没有要找的数,自然会返回-1;而第二种则是left==right,
此时left与right重合,Mid也就是二者重回的位置,但是没有判断该位置是否是要找的数(这句话很关键),如果这个位置的数恰好是要找的数,但仍然会返回-1。但将判断条件变为left<=right就可以很好的避免这类问题了。<