Search Insert Position 查找插入位置
给定有序数组,在合适的位置插入目标数字。
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Example
[1,3,5,6]
, 5 → 2
[1,3,5,6]
, 2 → 1
[1,3,5,6]
, 7 → 4
[1,3,5,6]
, 0 → 0
Solution:
public int searchInsert(int[] A, int target) {
if (A == null || A.length == 0) {
return 0;
}
int start = 0;
int end = A.length - 1;
int mid;
while(start + 1 < end) {
mid = start + ((end - start) >> 1);
if(target < A[mid]) {
end = mid;
} else if (target == A[mid]) {
return mid;
} else {
start = mid;
}
}
if(target <= A[start]) {
return start;
} else if(target <= A[end]) {
return end;
} else {
return end + 1;
}
}
思路:
1. 搜索用BS
2. 数组中没有重复数字,mid命中就跳出循环。start 与 end相邻,有3个可能的位置。