题解 | #二分查找-II#
二分查找-II
http://www.nowcoder.com/practice/4f470d1d3b734f8aaf2afb014185b395
几个要点:
1)相比一般二分查找多了一个左边第一个节点的条件,实际就是做个while找到最左边的就可以。
2)几个特殊情况先处理,否则会混乱:没有节点,一个节点
3)二分过程需要保留的变量,三个位置 左,中,右(a,mid,b)以及他们索引得到的数组对应的值
left middle right
4)明确可能匹配到的位置有三个:循环体条件=> left/right 循环内=>middle
5)每次过循环的a,b都应该往前走一步,因为上次循环得到的a/b已经证实不是target,即target在mid左边
mid-=1 a+=1
target在mid右边,mid+=1 b-=1
5)终止循环条件:二分以及没有中间值了=>left>=right or a>=b