给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。
[1,3,5,6],5 → 2
[1,3,5,6],2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6],0 → 0
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
if(A==null){
return -1;
}
if(A.length==0||A[0]>target){
return 0;
}
if(A[A.length-1]<target){
return A.length;
}
int startIndex=0;
int endIndex=A.length-1;
int middleIndex;
while(true){
middleIndex=(startIndex+endIndex)/2;
if(A[middleIndex]==target){
return middleIndex;
}
//最后肯定是剩两个数,这两个数左边的都比target小,右边的都比target大
if(startIndex>=endIndex){
if(target>A[startIndex]){
return startIndex+1;
}
else{
return startIndex;
}
}else{
if(target>A[middleIndex]){
startIndex=middleIndex+1;
}else{
endIndex=middleIndex-1;
}
}
}
}
}