力扣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,若目标值存在于数组中,最后一个可能的 left 和 right 是相同的,left < right 会错过一些情况。具体来说,在 left == right 时,依然需要检查这个位置。

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

相关推荐
企业数字化笔记1 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!2 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小郎君6584 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧4 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm4 小时前
40 二叉树的直径
c++·leetcode
Shimeri5 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J5 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang5 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖6 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy6 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化