使用二分查找时,代码经常因为边界问题陷入死循环,边写边整理一下思路,以期不再犯错
二分查找循环终止有两种情况,即left<right和left<=right。
1、left<right
当target>nums[mid]时,此时应取left = mid + 1;因为小于等于mid的值必不为target
当target<nums[mid]时,此时应取right = mid;因为left<right,取不到right值,以right作为边界则正好,而使用right=mid-1时,可能会丢失target。
2、left<=right
左边的情况与上述相同,但由于此时能取到right的值,而right=mid必不为target,所以right=mid-1.