力扣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。

相关推荐
Suxing910 小时前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法
LuminousCPP10 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
逆境不可逃11 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
Coder-magician11 小时前
《代码随想录》刷题打卡day31:动态规划-背包问题part02
算法·动态规划
薛定e的猫咪11 小时前
从因果视角解决多智能体协作:细读 SCIC 算法
算法
Forever Nore11 小时前
LeetCode 14 最长公共前缀 - 纵向扫描
linux·服务器·leetcode
c2385611 小时前
《算法武林谱:四大排序神功与二分寻宝术全解》
数据结构·算法·排序算法
圣保罗的大教堂11 小时前
leetcode 3090. 每个字符最多出现两次的最长子字符串 简单
leetcode
一米阳光866111 小时前
软考(中级)软件设计师核心笔记(9)算法——时间复杂度与空间复杂度、查找算法、排序算法
笔记·算法·职场发展·软考·软件设计师·中级职称
Mem0rin11 小时前
二分查找:左右边界
数据结构·算法