给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。
样例
[1,3,5,6],5 → 2
[1,3,5,6],2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6],0 → 0
典型的二分法应用,没什么好说的
1 int searchInsert(vector<int> &A, int target) { 2 // write your code here 3 int left=0,right=A.size()-1; 4 int mid,temp; 5 while(left<=right){ 6 mid=(left+right)/2; 7 if(temp==mid){ 8 return ++mid; 9 } 10 if(target==A[mid]){ 11 return mid; 12 } 13 if(target>A[mid]){ 14 left=mid+1; 15 } 16 else{ 17 right=mid-1; 18 } 19 temp=mid; 20 } 21 }
这个解有点特殊的就是用了个temp记录mid有没有变,没有变说明到最后一步了,这个主要是针对没有找到target但是要返回插入位置的情况。
看到别人的解法遍历也能过,但是要O(n),没必要