版權聲明:本文為博主原創文章,未經博主允許不得轉載。
難度:容易
要求:
給定一個排序數組和一個目標值,如果在數組中找到目標值則返回索引。如果沒有,返回到它將會被按順序插入的位置。
你可以假設在數組中無重復元素。
樣例
[1,3,5,6],5 → 2
[1,3,5,6],2 → 1
[1,3,5,6],7 → 4
[1,3,5,6],0 → 0
思路:
/**
* param A : an integer sorted array
* param target : an integer to be inserted
* return : an integer
*/
public int searchInsert(int[] A, int target) {
if(A == null || A.length == 0){
return 0;
}
int index = binarySearch(A, 0, A.length - 1, target);
if(index < 0){
for(int i = 0; i < A.length; i++){
if(target < A[i]){
index = i;
break;
}else if(i == A.length - 1){
index = i++;
}
}
}
return index;
}
public int binarySearch(int[] A,int left, int right, int target) {
while(left < right){
int mid = left + (right - left) / 2;
if(target == A[mid]){
right = mid;
}else if(target < A[mid]){
right = mid - 1;
}else{
left = mid + 1;
}
}
if(target == A[left]){
return left;
}
return -1;
}