Given a sorted array and a target value, return the index if the target is found. If not, return the index where it wocould 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
Thought: Because the sequence is ordered, use binary search. Returns start.
1 class Solution { 2 public: 3 int searchInsert( int A[], int n, int target ) { 4 int start = 0, end = n-1; 5 while( start <= end ) { 6 int middle = ( start + end ) / 2; 7 if( A[middle] == target ) { return middle; } 8 if( A[middle] < target ) { 9 start = middle+1;10 } else {11 end = middle-1;12 }13 }14 return start;15 }16 };
You can also call the standard library function lower_bound:
1 class Solution {2 public:3 int searchInsert( int A[], int n, int target ) {4 int *ptr = lower_bound( A, A+n, target );5 return ptr - A;6 }7 };
Search insert position