34. 排序数组中找出目标元素的第一个和最后一个位置(多解)
二分查找的变式:写两个函数分别找出第一个位置,和第二个位置(有可能不存在,若第一个找到了,说明第二个存在,因此找完第一个可以判断返回值是否为-1),代码如下:
写法1:
找第一个位置代码:
找最后位置代码:
二分法框架不变,在找到目标值时候做出的判断略有不同。
写法2:用while left<right遍历,每次遍历结束后要做判断(个人不推荐)
35. 搜索插入位置
无重复元素,升序数组。
分析:首先正常查找,若找到则返回mid。没返回则继续查找,当循环退出时left>right,分析边界条件,
1.当要插入最右边时,left>right刚好超出数组右边界 ,返回left。
2.如果插入最左边时,此时整个循环过程中,left保持初值不变,循环退出时,right为-1,返回left插入位置。
3.若在中间插入,在left = right时刻,target>mid值,此时插入位置为mid后面,left=mid+1,故返回left. target < mid值,此时插入位置为mid(取代mid的位置),返回left。
代码: