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
题意
在一个排好序的数组里找到目标数,如果存在则返回其下标,不存在,则返回其应该插入的位置下标。可以假设数组没有重复元素。
题解
二分查找法:
细节需要特别注意
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
if(nums.empty()||target<nums[0]) return 0;
if(target>nums[nums.size()-1]) return nums.size();
int begin=0,end=nums.size()-1,mid=0;
while(begin<end)
{
mid=(begin+end)/2;
if(mid==begin&&nums[begin]!=target) return end;//此时end=begin+1,防止mid=begin死循环
if(nums[mid]>target) end=mid;
else if(nums[mid]<target) begin=mid;
else return mid;
}
if(nums[end]<target) return begin+1;
else return end;
}
};