LeetCode No34在排序数组中查找元素的第一个和最后一个位置

Problem: 34. 在排序数组中查找元素的第一个和最后一个位置

文章目录

思路

进行一次二分查找,如果查到了,那么再接一个while循环走到当前重复数字的左端点,后接一个while循环走到右端点;如果没有查到返回一个{-1,-1}即可。

具体见代码注释。

复杂度

  • 时间复杂度: O ( l o g n ) O(logn) O(logn)
  • 空间复杂度: O ( 1 ) O(1) O(1)

Code

java 复制代码
class Solution {
    public int[] searchRange(int[] nums, int target) {
        if (nums.length == 0) return new int[]{-1, -1};
        int left = 0, right = nums.length - 1;
        int mid = 0;
        while (left <= right) {
            mid = left + (right - left) / 2;
            if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        //这个情况是查找到的刚好不在区间内,在外部,例如{2,2} target=3
        //此时 left = 2
        if (left < 0 || left > nums.length - 1 || nums[left] != target) {
            return new int[]{-1, -1};
        }
        //找到左端点的下标,要判断是否是左边界
        while ((left - 1) > 0 && nums[left - 1] == target) left--;
        int[] result = new int[2];
        result[0] = left;
        //找到右端点的下标,要判断是否是右边界
        while ((left + 1) <= nums.length - 1 && nums[left + 1] == target) left++;
        result[1] = left;
        return result;
    }
}
相关推荐
EdmundXjs8 分钟前
大模型核心概念解读
人工智能·算法
lookaroundd10 分钟前
llm-compressor 普通量化调用链分析
python·算法
小羊在睡觉24 分钟前
力扣239. 滑动窗口最大值
数据结构·后端·算法·leetcode·go
兰令水27 分钟前
topcode【随机算法题】【2026.5.20打卡-java版本】
java·开发语言·算法
此生决int37 分钟前
算法从入门到精通——前缀和
c++·算法·蓝桥杯
我星期八休息43 分钟前
Linux系统编程—库制作与原理
linux·运维·服务器·数据结构·人工智能·python·散列表
大大杰哥1 小时前
leetcode hot100(4)矩阵
算法·leetcode·矩阵
小白|1 小时前
cmake:昇腾CANN构建系统完全指南
java·c++·算法
nebula-AI1 小时前
人工智能导论:模型与算法(未来发展与趋势)
人工智能·神经网络·算法·机器学习·量子计算·automl·类脑计算
炽烈小老头1 小时前
【每天学习一点算法 2026/05/21】课程表
学习·算法