在数列里找到target返回index或者返回target插入的位置,典型的二分搜索,值的查找很容易,就是区间查找比较麻烦,需要一个变量纪录前边界i的值,而且在需要修改i、j值的时候对记录变量也要处理。
public int searchInsert(int[] A, int target) {
int recoi=0;
if(A.length==0)return 0;
if(target<A[0])return 0;
if(target>A[A.length-1])return A.length;
if(A.length==1&&A[0]==target)return 0;
int i=0,j=A.length-1;
while(i<=j){
int min=(i+j)/2;
if(A[min]==target)return min;
if(i==j)break;
recoi=i;
if(target<A[min]){
j=min-1;
if(A[j]<target){
recoi=j;
break;
}
}
if(target>A[min]){
i=min+1;
recoi=min;
}
}
return recoi+1;
}
Update 2015/08/23: 上面的解法很是逗比,下面是简单的解法
public class Solution {
/**
* param A : an integer sorted array
* param target : an integer to be inserted
* return : an integer
*/
public int searchInsert(int[] A, int target) {
// write your code here
int i = 0;
int j = A.length - 1;
while (i <= j){
int mid = (i + j) / 2;
if (A[mid] == target)
return mid;
else if (A[mid] < target){
if (mid + 1 > A.length - 1 || A[mid + 1] > target)
return mid + 1;
i = mid + 1;
} else {
if (mid - 1 < 0 || A[mid - 1] < target)
return mid;
j = mid - 1;
}
}
return 0;
}
}