算法:5.在排序数组中查找元素的第⼀个和最后⼀个位置

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

核心思路:二分查找

本题关键:

1.理解找左端点的二分查找算法

2.理解找右端点的二分查找算法

(请依次看解读内容)

思考一下,如果求右端点的判断指针移动方法不变,使用mid=left+(right-left)/2求右端点也是一样能求出来的。

java 复制代码
public int[] searchRange(int[] nums, int target){
        int[] indexes = new int[]{-1,-1};
        if(nums.length==0) return indexes;

        int left=0,right=nums.length-1;
        //找左端点-->使用int mid=left+(right-left)/2;
        while(left<right){
            int mid = left+(right-left)/2;
            int num = nums[mid];
            if(num<target) left=mid+1;
            else right=mid;
        }
        if(nums[left]==target) {
            indexes[0]=left;
           }else return indexes;
        left=0;
        right=nums.length-1;
        //找右端点-->使用int mid=left+(right-left+1)/2;
        while(left<right){
            int mid = left+(right-left+1)/2;
            int num = nums[mid];
            if(num<=target) left=mid;
            else right=mid-1;
        }
        if(nums[left]==target) indexes[1]=left;
        return indexes;
    }
相关推荐
敲敲了个代码2 小时前
前端指纹技术是如何实现的?(Canvas、Audio、硬件API 核心原理解密)
前端·javascript·学习·算法·面试·web
夏鹏今天学习了吗2 小时前
【LeetCode热题100(84/100)】乘积最大子数组
算法·leetcode·职场和发展
Yupureki2 小时前
《算法竞赛从入门到国奖》算法基础:入门篇-递归初阶
c语言·开发语言·数据结构·c++·算法·visual studio
a3535413822 小时前
牛顿迭代法中的雅克比矩阵几何意义
线性代数·算法
Coder个人博客2 小时前
Linux6.19-ARM64 crypto NH-Poly1305 NEON子模块深入分析
linux·网络·算法·车载系统·系统架构·系统安全·鸿蒙系统
自然语2 小时前
三维场景管理类位姿抖动优化计划
人工智能·数码相机·算法
源代码•宸2 小时前
Leetcode—3314. 构造最小位运算数组 I【简单】
开发语言·后端·算法·leetcode·面试·golang·位运算
夏鹏今天学习了吗2 小时前
【LeetCode热题100(88/100)】最长回文子串
算法·leetcode·职场和发展
轻微的风格艾丝凡2 小时前
圆周率(π)2-10进制转换及随机性量化分析技术文档
人工智能·算法