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;
    }
}
相关推荐
Logic1016 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
小蒋学算法6 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法
荆棘鸟智能7 小时前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
hhb_6188 小时前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法
朝朝辞暮i8 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
苏打豆8 小时前
Pinocchio源码阅读——刚体运动物理量空间变换及求导
c++·线性代数·算法·矩阵·机器人
FluxArt9 小时前
GPT Image 2.5 中文提示词教程:Flux Art 可复用模板
前端·gpt·算法
思麟呀9 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
阜阳山君GEO9 小时前
豆包 SEED 新版本 GEO 优化:信源金字塔、打分体系与避坑落地指南
人工智能·算法
晓天衡宇•评测社区9 小时前
晓天衡宇亮相 2026 云栖大会:迈向更可信的高质量评测
人工智能·算法·机器学习