这个看完解析了发现确实是一个很普通的二分查找问题,但是需要注意一下边界,我感觉二分查找的边界值我需要想想,每道题都是,难道是我没有完全领会精髓吗?
这道题就是因为要找第一个出错版本,所以右边界改变的时候不能减一,要把最后检测到出错的放在这个区间里面。
我觉得就是一定要保证查找的区间有我们需要的值,至于怎么加进去的,具体情况具体分析。
还有一点,看解题的时候有解释为什么大家计算中间的值一般都是使用这个方法 int m = l + (r - l)/2;为了防止溢出,我以前觉得一样的,但后来发现这个确实可以避免溢出的问题。
代码:
https://github.com/hanleirx/LeetCode/blob/master/278.%20%E7%AC%AC%E4%B8%80%E4%B8%AA%E9%94%99%E8%AF%AF%E7%9A%84%E7%89%88%E6%9C%AC