力扣hot100:搜索插入位置

题目描述:

题目分析:

本题是一个二分查找,核心思路是通过计算中心点和目标值的大小关系,以此在一个while循环里不断更新左右端点,知道左端点大于右端点。

代码:

java 复制代码
class Solution {

    public int searchInsert(int[] nums, int target) {
        int n=nums.length;
        int right=n-1;
        int left=0;
        while(left<=right){
            int mid=(right-left)/2+left;
            if(target>nums[mid]){
                left=mid+1;
            }else{
                right=mid-1;
            }
        }
        return left;

    }
}

代码要点分析:

1.中心点的计算为mid=(right-left)/2+left,这样做是为了防止整数溢出。

2.left<=right,若目标值存在于数组中,最后一个可能的 leftright 是相同的,left < right 会错过一些情况。具体来说,在 left == right 时,依然需要检查这个位置。

3.不必判断target==numsmid的情况,在target==numsmid时直接把mid更新为right-1,如果后续范围数组里还有target,那么二分查找依旧能查找到范围里的target;如果这已经是最左边的target,那么随后循环里就会出现target>numsmid的情况,此时left就会不断右移,知道numsleft=target。

相关推荐
Lumos18616 分钟前
故障保护与鲁棒性(十七)
算法
手写码匠21 分钟前
从零实现大模型推理引擎:Continuous Batching 与动态调度系统深度解析
人工智能·深度学习·算法·aigc
wabs66642 分钟前
关于单调栈【力扣503.下一个更大元素II的思考】
算法·单调栈
c238561 小时前
下篇:伸缩魔法!进阶吃透可变滑动窗口篇
c++·算法
186******205311 小时前
RuView 新手快速上手与实战指南
算法
txzrxz1 小时前
关于二维/多维前缀和
算法
来一碗刘肉面1 小时前
顺序表的按值查找
数据结构·c++·算法
zzz_23682 小时前
【Java实习面试算法冲刺】图论
java·算法·面试
大鱼>2 小时前
宠物监控数据安全与隐私保护:端到端加密与合规实践
人工智能·深度学习·算法·iot·宠物
被自己蠢哭2 小时前
BFS广度优先搜索问题:#P00496. 华为od机试—自动泊车
算法