Leetcode34. 在排序数组中查找元素的第一个和最后一个位置(二分模板题)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode34. 在排序数组中查找元素的第一个和最后一个位置(二分模板题)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

解题思路

这一题可以直接看我之前总结的二分模板题,一模一样。
题目链接:ACWing789. 数的范围https://blog.csdn.net/qq_44713772/article/details/116003794

代码

class Solution {
    public int[] searchRange(int[] nums, int target) {
        if(nums.length == 0)
            return new int[]{-1, -1};
        int l = 0, r = nums.length - 1;
        while(l < r) {
            int mid = r + l >> 1;
            if(nums[mid] >= target) 
                r = mid;        //代表答案在左边且包含mid这个点
            else
                l = mid + 1;    //代表答案在右边且不包含mid这个点
        }
        int left = l;
        if(nums[left] != target)    //如果target在数组不存在
            return new int[]{-1, -1};
        else {
            l = 0;
            r = nums.length - 1;
            while(l < r) {
                int mid = r + l + 1 >> 1;   //加1为了防止死循环
                if(nums[mid] <= target)
                    l = mid;        //代表答案在右边且包含mid这个点
                else 
                    r = mid - 1;    //代表答案在左边且不包含mid这个点
            }
            return new int[]{left, r};
        }
    }
}  

复杂度分析

  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)

以上是关于Leetcode34. 在排序数组中查找元素的第一个和最后一个位置(二分模板题)的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode] 34. 在排序数组中查找元素的第一个和最后一个位置(Java)

算法leetcode|34. 在排序数组中查找元素的第一个和最后一个位置(rust重拳出击)

[LeetCode]34. 在排序数组中查找元素的第一个和最后一个位置(二分)

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

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

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