https://leetcode.com/problems/search-insert-position/
本来觉得这道题非常简单,不知道为啥难度为medium
遍历数组,如果当前值比target大或者和target相等,就返回当前的index
如果遍历完数组都还没返回,说明数组中所有值都比target小,则返回 A.length,即放在最后一个。
代码如下:
public class Solution {
public int searchInsert(int[] A, int target) {
for(int i=0; i<A.length; i++){
if(A[i]>=target) return i;
}
return A.length;
}
}
结果看tag发现原来是 binary search的题目,因为上面方法的时间复杂度是O(n),binary search复杂度是O(lgn),所以每次都应该再想想有没有更好的办法.
看到sorted array找位置这种就应该马上想到binary search!!!!
注意:标准binary search如果没找到值的话,那么此时的left就是比target大的最小数,如果没有值比target大的话,那么left就是A.length
public int searchInsert(int[] A, int target){
int left = 0;
int right = A.length-1;
while(left<=right){
int mid = (left+right)/2;
if(A[mid]>target){
right = mid -1;
}
else if(A[mid]<target){
left = mid+1;
}
else return mid;
}
return left;
}