03. 解密前端算法题:搜索插入位置
AI 概述
题目解题思路左闭右闭区间代码实现左闭右开区间代码实现
题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
...
目录

题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
示例 4:
输入: nums = [1,3,5,6], target = 0
输出: 0
示例 5:
输入: nums = [1], target = 0
输出: 0
解题思路
- 这个题目本质上是利用二分法查找左边界
- 二分法的细节点见1 题
左闭右闭区间代码实现
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
if (nums == null || !nums.length) {
return -1;
}
// 左闭右闭区间
let begin = 0,
end = nums.length-1;
while (begin <= end) { // 下面这样写是考虑大数情况下避免溢出
let mid = begin + ((end - begin) >> 1);
if (nums[mid] > target) {
// 在左半区间中查找
end = mid - 1;
} else if (nums[mid] < target) {
// 在右半区间中查找
begin = mid + 1;
} else {
// 正好就是
return mid;
}
}
// 查找的是左边界,所以返回 begin
return begin;
};
左闭右开区间代码实现
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
if (nums == null || !nums.length) {
return -1;
}
// 左闭右开区间
let begin = 0,
end = nums.length;
// 左闭右开
while (begin < end) { // 下面这样写是考虑大数情况下避免溢出
let mid = begin + ((end - begin) >> 1);
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
// 在右半区间中查找
begin = mid + 1;
} else {
// 在左半区间中查找
end = mid;
}
}
// 查找的是左边界,所以返回 begin
return begin;
};
力扣原题链接:点击这里
以上关于03. 解密前端算法题:搜索插入位置的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 03. 解密前端算法题:搜索插入位置
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 03. 解密前端算法题:搜索插入位置
微信
支付宝