目录
题目描述思路分析AC 代码总结优先考虑边界情况 红蓝标记解法代码题目描述
原题链接 :
35. 搜索插入位置 - 力扣(LeetCode) (leetcode-cn.com)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
(相关资料图)
请必须使用时间复杂度为 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 <= 10^4
-10^4 <= nums[i] <= 10^4
nums 为无重复元素的升序排列数组
-10^4 <= target <= 10^4
思路分析
首先明确题目的含义:
(1)数组是有序的;
(2)如果含有与目标值相等,则返回目标值下标,若不同,则按顺序排序获取下标
思路:采用二分搜索法的策略,获取中间数据的大小,缩短数组的大小定位区间,如在数组中间的前一段,数组中间的后一段
获取下标i的值arrs[i]>=target,进行相应的下标返回
AC 代码
class Solution { public int searchInsert(int[] nums, int target) { int index = (nums.length / 2); if (nums[index] >= target) { return compareByIndex(nums, 0, index+1, target); } else return compareByIndex(nums, index+1, nums.length, target); } private int compareByIndex(int[] nums, int start, int end, int target) { for (int i = start; i < end; i++) { if (nums[i] >= target) { return i; } } return end; } }
总结
这种查找位置的,肯定二分法是合适的,即使不能直接套用二分法的公式,也是二分法的思想,变种。
参考
❤️思维导图整理: 总结了二分查找的通用模板写法, 彻底解决几个易混淆问题❤️ - 搜索插入位置
优先考虑边界情况 红蓝标记解法
首先考虑target是否>=nums[numsSize-1],大于则返回numsSize,等于则返回numsSize-1;
再检查底线,若小于等于nums[0]则返回nums[0];
else
定义左边界left=0,右边界right=numsSize-1;
进入循环,缩小边界,直到left+1=right;
若找到则直接返回,循环结束时未找到则返回left+1(在left与right之间)
代码
int searchInsert(int* nums, int numsSize, int target){ if(nums[0]>=target) { return 0; } else if(nums[numsSize-1]target ) { r=mid; } else if(nums[mid] 以上就是Go语言题解LeetCode35搜索插入位置示例详解的详细内容,更多关于Go语言搜索插入位置的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?