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;
    }
}
相关推荐
AndrewHZ2 小时前
【LLM技术全景】阶段总结:技术原理篇核心知识回顾
人工智能·深度学习·算法·语言模型·大模型·llm·芯片开发
小星星闪亮登场2 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
玖玥拾3 小时前
LeetCode 88 合并两个有序数组
算法·leetcode
数据皮皮侠AI4 小时前
上市公司数字供应链金融指数(2010-2024)
大数据·人工智能·算法
2501_942389554 小时前
Epoch AI旗下FrontierMath的负责人Elliot Glazer
数据结构·决策树·动态规划·散列表
小程故事多_804 小时前
用GRPO算法重塑多智能体系统,从原理落地到复杂任务规划实战
人工智能·算法
Hi李耶5 小时前
【LeetCode】541.反转字符串 II
算法·leetcode·职场和发展
shylyly_5 小时前
104.二叉树的最大深度
数据结构·算法·104.二叉树的最大深度
AI科技星5 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星