34. 在排序数组中查找元素的第一个和最后一个位置

这道题比较巧妙的是末尾位置的计算,他用的是找比target大1的位置,然后这个位置-1就得到了target的最后一个位置。

为了支持这个,所以二分查找哪里也是有所不同的,首先默认是找最左面的位置,所以要在要在左面的闭区间里面找,所以r=m不能减一;再说右边界的初始值的问题,因为有可能target这个值是在最后,这样的话,我们按照之前的二分查找,将长度减一的话,我们得到的就是长度减一的返回,那last本来还需要减一的,所以就会有问题。其他的话,就是正常的二分查找了。最后返回结果之前记得判断一下是否没有找到。

代码:

https://github.com/hanleirx/LeetCode/blob/master/34.%20%E5%9C%A8%E6%8E%92%E5%BA%8F%E6%95%B0%E7%BB%84%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%85%83%E7%B4%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%92%8C%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E4%BD%8D%E7%BD%AE

你可能感兴趣的:(34. 在排序数组中查找元素的第一个和最后一个位置)