搜索插入位置
问题描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
样例输入
cpp
nums = [1,3,5,6], target = 5
样例输出
cpp
2
评测用例规模与约定
1 <= nums.length <= 10^4
-10^4 <= nums[i] <= 10^4
nums 为 无重复元素 的 升序 排列数组
-10^4 <= target <= 10^4
解析
二分经典题目,注意边界范围处理就行。
参考程序
cpp
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int l=0,r=nums.size();
int cnt=-1,ans=-1;
for(int i=0;i<r-1;i++){
if(nums[i]<target&&nums[i+1]>target)cnt=i+1;
}if(target<=nums[0])cnt=0;if(target>nums[r-1])cnt=r;
r-=1;
while(l<=r){
int mid=(l+r)>>1;
if(nums[mid]>target)r=mid-1;
if(nums[mid]<target)l=mid+1;
if(nums[mid]==target){ans=mid;break;}
}
if(ans>=0)return ans;
else return cnt;
}
};
难度等级
⭐️⭐️(1~10星)
以个人刷题整理为目的,如若侵权,请联系删除~