原题如下:
其实很简单,二分法就搞定了,但是我看到题解里面有人说有二分模板,是这样的:
下面是他对这道题的解法:
下面我想记录的是两个问题:
1、为什么条件判断是left<=right
2、为什么最后返回left就可以了
我认为是这样子的:
二分查找最后会纠结的无非是下面这两种情况:
在思考时,要记住的点是,(L R)/2在这种邻近的情况下,mid是等于L的。
对于第一种情况,
第一次循环,**由于在判断时,先判断的L**,所以L会mid 1,也就是变成R。
第二次循环,L,R重合了,L不会被触发,反而是R会 -1,变到刚才的L位置。 至此,while循环结束。
返回L就是插入位置。
对于第二种情况,
第一次,L会 1,和R重合。
第二次,L会 1,超过R,while结束。
返回L就是插入位置。
考虑清楚这两种情况,对于题解中讲述的这种模板也就清楚了。
欢迎讨论。