原题:
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:
Input: [1,3,5,6], 5 Output: 2
Example 2:
Input: [1,3,5,6], 2 Output: 1
Example 3:
Input: [1,3,5,6], 7 Output: 4
Example 1:
Input: [1,3,5,6], 0 Output: 0解决方法:
要找的其实是第一个不小于目标值的位置。依然是二分查找的题。
需要注意两点:
- 循环的结束条件:有没有等于号。
- lo和hi的跳跃:有没有+1或-1。
不同题之间这样的细节是有所不同的,直接会影响到算法的成功与否。
int searchInsert(vector<int>& nums, int target) {
int lo = 0, hi = nums.size() -1;
while(lo <= hi){
int mid = lo + ((hi-lo) >> 1);
if (nums[mid] < target)
lo = mid + 1;
else
hi = mid - 1;
}
return lo;
}