题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
nums 为 无重复元素 的 升序 排列数组
常规思路:
class Solution {
public:
int find(vector<int> &nums,int target)
{
int n =nums.size()-1;
if(target>nums[n])
{
return n+1;
}
if (target < nums[0])
{
return 0;
}
int i;
for(i=0;i<n;i++)
{
if(target <= nums[i])
{
return i;
}
}
return i;
}
int searchInsert(vector<int>& nums, int target) {
return find(nums,target);
}
};
二分查找:
// 闭区间写法
class Solution
{
// lower_bound 返回最小的满足 nums[i] >= target 的 i
public:
int find(vector<int> &nums, int target)
{
int left = 0, right = nums.size() - 1; // 闭区间 [left, right]
while (left <= right) // 区间不为空
{
int mid = left + (right - left) / 2;
if (nums[mid] < target)
{
left = mid + 1; // 范围缩小到 [mid+1, right]
}
else
right = mid - 1; // 范围缩小到 [left, mid-1]
}
return left; // 或者 right+1
}
int searchInsert(vector<int>& nums, int target)
{
return find(nums, target);
}
};