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.
Here are few examples.
[1,3,5,6]
, 5 → 2
[1,3,5,6]
, 2 → 1
[1,3,5,6]
, 7 → 4
[1,3,5,6]
, 0 → 0
Analysis: Applied generalized binary search to find the upper bound of the target. The special case that needs to be handled for this algorithm is that the value of target is greater than the value of the last element of array A.
public class Solution {
public int searchInsert(int[] A, int target) {
if(A.length==0) return 0;
if(target>A[A.length-1]) return A.length;
int low=0, high=A.length-1;
while(low < high) {
int mid = (low+high)/2;
if(target==A[mid]) return mid;
else if(target>A[mid]) low=mid+1;
else if(target<A[mid]) high=mid;
}
return high;
}
}