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

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

题目链接

二分查找

  • 先二分查找,找到后更新第一个和最后一个的位置,继续二分,找头尾
class Solution {

    int min = 100000 + 5, max = -1;

    public int[] searchRange(int[] nums, int target) {
        boolean flag = binarySearch(nums, target, 0, nums.length-1);
        if(flag) return new int[]{min, max};
        return new int[]{-1, -1};
    }

    private boolean binarySearch(int[] nums, int target, int left, int right){
        if(left > right) return false;
        boolean flag = false;
        int mid = left + (right - left) / 2;
        if(nums[mid] == target){
            flag = true;
            min = Math.min(min, mid);
            max = Math.max(max, mid);
        }
        if(nums[mid] <= target && binarySearch(nums, target, mid+1, right))
            flag = true;
        if(nums[mid] >= target && binarySearch(nums, target, left, mid-1))
            flag = true;
        return flag;
    }
}
posted @ 2021-02-17 10:48  一天到晚睡觉的鱼  阅读(37)  评论(0)    收藏  举报