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

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

输入:nums = [5,7,7,8,8,10], target = 8

输出:[3,4]

有序数组查找使用二分法,但需要得到两个下标

因此分两次查找,第一次找左下标,找的时候往左靠

第二次找右下标,找的时候往右靠

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int[] res = new int[] {-1, -1};
        res[0] = helper(nums, target, true);
        res[1] = helper(nums, target, false);
        return res;
    }
    public int helper(int[] nums, int target, boolean flag) {
        int res = -1;
        int l = 0, h = nums.length - 1, mid;
        while(l <= h) {
            mid = l + (h - l) / 2;
            if(target < nums[mid])
                h = mid - 1;
            else if(target > nums[mid])
                l = mid + 1;
            else {
                res = mid;
                if(flag)
                    h = mid - 1;
                else
                    l = mid + 1;
            }
        }
        return res;
    }
}

知识点:

总结:

posted @ 2021-10-13 14:50  1243741754  阅读(25)  评论(0编辑  收藏  举报