0
点赞
收藏
分享

微信扫一扫

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

西特张 2022-04-13 阅读 161
LeetCode

在这里插入图片描述
在这里插入图片描述
在排序数组中查找元素的第一个和最后一个位置

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int leftId = binarySearch(nums, target, true);
        int rightId = binarySearch(nums, target, false) - 1;
        if (leftId <= rightId &&  rightId < nums.length && nums[leftId] == target && nums[rightId] == target) {
            return new int[]{leftId, rightId};
        }
        return new int[]{-1, -1};
    }

    public int binarySearch(int[] nums, int target, boolean lower) {
        int len = nums.length;
        int left = 0, right = nums.length - 1, ans = nums.length;

        while (left <= right) {

            int mid = (left + right) / 2;

            //进行二分
            //或者是一串相等的数时,right往前进,此时是在找leftId
            if (nums[mid] > target || lower && nums[mid] >= target) {
                right = mid - 1;
                ans = mid;
            }
            else {
                left = mid + 1;
            }
        }
        return ans;

    }
}
举报

相关推荐

0 条评论