题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
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]}elseright = mid - 1; // 范围缩小到 [left, mid-1]}return left; // 或者 right+1}int searchInsert(vector<int>& nums, int target){return find(nums, target);}
};