[1,3,5,6], insert 5 at index 2
[1,3,5,6], insert 2 at index 1
[1,3,5,6], insert 7 at index 4
[1,3,5,6], insert 0 at index 0
2. Implementation
Thought 1: find out two adjacent number which are most close left bound and right bound for the target value.
Q1: how to find these two number
A1: try to find a number first, we can redefine this question like find the target value
Q1: any best way to find a target value?
A1: Binary search will do the job just right
Q1: BS criterion?
A1: sorted array
Last executed input: [1], 0 if r != m-1 Last executed input: [1], 2 if l != m+1
NOTE:
while ( l <= r )
else if ( nums[m] > target )
{
r = m-1;
}
else
{
l=m+1;
}
// Time :O(log(n)), Space:O(1) public int searchInsert(int[] nums , int target) { // valid the input if (nums == null || nums.length == 0) { return 0; // first element } int l = 0; int r = nums.length-1; // NOTE: when l increment to length-1 (==r) and the value there still less than target, left increment to length and (1 > r) return // NOTE: when r change to 0 (==l) and the value there still larger than target, r change to -1(l>r) and return left while ( l <= r ) { int m = l + (r-l)>>1; if ( nums[m] == target ) { return m; } else if ( nums[m] > target ) { // NOTE: for the case [1], 0, if r= m instead of m-1 then m always 0 and l always 0, infinite loop //r = m; r = m-1; } else { l=m+1; } } return l; }3. Similar Ones
(M) Search for a range
Search a 2D matrix
No comments:
Post a Comment