Loading

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

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

题目描述

样例

算法分析

  • 第一次二分找到 大于等于 target的最小值的位置,即查找元素的第一个位置a

    • 开始位置,mid>=target
  • 第二次二分找到 小于等于 target的最大值的位置,即查找元素的最后一个位置b

    • 最终位置, mid<=target

时间复杂度\(O(log(n))\)

Java代码

class Solution {
    public int[] searchRange(int[] nums, int target) {
        if(nums.length == 0) return new int[]{-1, -1};
        int n = nums.length;
        int l = 0;
        int r = n -1;

        while(l < r){
            int mid = l + r >> 1;
            if(nums[mid] >= target ) r = mid;
            else l = mid + 1;
        }

        int a = l;
        l = 0;
        r = n - 1;
        while(l < r){
            int mid = l + r + 1>> 1;
            if(nums[mid] <= target) l = mid;
            else r = mid - 1;
        }

        int b = l;
        if(nums[a] != target || nums[b] != target) return new int[]{-1, -1};
        return new int[]{a, b};
    }
}
posted @ 2020-11-01 15:43  想用包子换论文  阅读(173)  评论(0)    收藏  举报