No.704 二分查找
Q: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
该题为最常见的二分查找,首先在两端建立指针lo和hi,使用while循环,当lo <= hi时,代表两头的指针还未相遇,取一个mid作为lo和hi的中间二分点,(mid = lo + (hi - lo) / 2 防止越界)用该点的值 nums[mid] 来判断 target在 mid 下标的左边还是右边:
如果nums[mid] < target,说明mid在target的下标左边,应当将lo = mid + 1,
如果nums[mid] == target,则直接返回对应mid,
如果nums[mid] > target,说明mid在target的下标右边,应该将hi = mid - 1,
边界条件:当lo 与 hi相邻时,执行倒数第二次循环,这时的mid会等于lo,如果nums[mid]和target不等,都会实现 lo == hi 触发最后一次循环.
在最后一次循环中,mid 要么会等于上一轮的lo(即未查到,返回-1),要么等于上一轮的hi(该hi作为下标还未被nums[mid] == target