Problem Statement:
Given a sorted array of distinct integers 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 must write an algorithm with O(log n) runtime complexity.
Example 1:
Input: nums = [1,3,5,6], target = 5 Output: 2
Example 2:
Input: nums = [1,3,5,6], target = 2 Output: 1
Example 3:
Input: nums = [1,3,5,6], target = 7 Output: 4
Solution:
Very classic application of binary search.
- We are looking for the minimal k value satisfying
nums[k] >= target, and we can just copy-paste our template. - Notice that our solution is correct regardless of whether the input array
numshas duplicates. - Also notice that the input
targetmight be larger than all elements innumsand therefore needs to placed at the end of the array.- That's why we should initialize
right = len(nums)instead ofright = len(nums) - 1.
- That's why we should initialize
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0, right = nums.length;
while(left < right){
int mid = left + (right - left)/2;
if(nums[mid] >= target){
right = mid;
} else{
left = mid + 1;
}
}
return left;
}
}