已解决
Leetcode刷题详解——搜索插入位置
来自网友在路上 153853提问 提问时间:2023-10-26 13:25:09阅读次数: 53
最佳答案 问答题库538位专家为你答疑解惑
1. 题目链接:35. 搜索插入位置
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
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
为 无重复元素 的 升序 排列数组-104 <= target <= 104
3. 算法思路(二分查找)
-
设插入坐标为
index
,根据插入位置的特点可以知道:[left,index-1]
内所有元素均是小于target
的[index,right]
内所有元素均是大于等于target
的
-
设
left
为左边界,right
为有边界,根据mid
位置的信息,决定下一轮的区间范围:- 当
nums[mid]>=target
时,说明mid
落在了[index,right]
区间上,mid
包括mid
本身,可能是最终结果,所以我们接下来查找的区间在[left,mid]
上。因此更新right
到mid
位置,继续查找 - 当
nums[mid]<target
时,说明mid
落在了[left,index-1]
区间上,mid
右边但不包括mid
本身,可能是最终结果,所以我们接下来查找的区间在[mid+1,right]
上。因此更新left
到mid+1
的位置,继续查找
- 当
-
直到我们的查找结果的长度变为
1
,也就是left==right
的时候,left
或者right
所在的位置就是我们要找的结果
4. C++算法代码
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left=0,right=nums.size()-1;while(left<right){int mid=left+(right-left)/2;if(nums[mid]<target){left=mid+1;}else{right=mid;}}if(nums[left]<target) return right+1;return right;}
};
查看全文
99%的人还看了
相似问题
- vsto word 获取目录起始页和结束页,如目录起始位置为2、结束位置为3,返回2和3
- IP地理位置定位技术:保护网络安全的新利器
- WSL2安装ubuntu及修改安装位置,设置Ubuntu开机启动链接ssh服务
- ROS navigation栅格地图原点位置如何确定?
- 35. 搜索插入位置 --力扣 --JAVA
- 【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘
- 76基于matlab的免疫算法求解配送中心选址问题,根据配送地址确定最佳配送中心地址位置。
- 小程序判断是否授权位置信息和手动授权
- 计算机毕业设计 基于SpringBoot的车辆网位置信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
- 基于DOTween插件实现金币飞行到指定位置功能
猜你感兴趣
版权申明
本文"Leetcode刷题详解——搜索插入位置":http://eshow365.cn/6-25132-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!