35. 搜索插入位置
Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
具体题目链接: 题目链接
思路:
题目要我们返回第 一 个 大于等于≥ 目标元素 2 的下标
思路:二分题目的思路:
确定二分边界
编写二分的代码框架
设计一个check(性质)
判断一下区间如何更新
如果更新方式写的是l=mid,r=mid-1,那么就在算mid的时候加上1
分析:
细节:「查找第 1 次出现的位置」和「查找第一个大于等于 target 的元素的位置」这样的问题,如果根据 target 位置的值,把待搜索区间分成 2个部分,满足性质的的答案一定在其中某一个区间里
代码:
var searchInsert = function(nums, target) {
if(!nums.length)return 0;//边界条件的判断
let left = 0;
let right = nums.length;
while(left<right) {
let mid = left + ((right-left) >>1);
if(nums[mid] >= target) {//当target值在mid的左边的时候
right = mid;//只提取左边区间
} else {
left = mid+1;//mid<target的时候 mid取不到,所以从mid+1开始
}
}
return left;
};
总结:
这是算法系列文章「二分专题」的相关题解