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;
    }
}
相关推荐
a伊雪4 分钟前
c++ 引用参数
c++·算法
圣保罗的大教堂34 分钟前
leetcode 3531. 统计被覆盖的建筑 中等
leetcode
Data_agent1 小时前
1688获得1688店铺列表API,python请求示例
开发语言·python·算法
2301_764441331 小时前
使用python构建的应急物资代储博弈模型
开发语言·python·算法
小熳芋1 小时前
验证二叉搜索树- python-递归&上下界约束
数据结构
hetao17338372 小时前
2025-12-11 hetao1733837的刷题笔记
c++·笔记·算法
Xの哲學2 小时前
Linux电源管理深度剖析
linux·服务器·算法·架构·边缘计算
小飞Coding2 小时前
一文讲透 TF-IDF:如何用一个向量“代表”一篇文章?
算法
算家计算2 小时前
突然发布!GPT-5.2深夜来袭,3个版本碾压人类专家,打工人该怎么选?
算法·openai·ai编程
s09071363 小时前
Xilinx FPGA 中ADC 数据下变频+ CIC 滤波
算法·fpga开发·fpga·zynq