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

34 Find First and Last Position of Element in Sorted Array

问题描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。

示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
class Solution {
    public int[] searchRange(int[] nums, int target) {
        int first = binarySearchFirstTarget(nums,target);
        int last = binarySearchLastTarget(nums,target);
        return new int[]{first,last};
    }

    //查找第一个target元素的下标
    private int binarySearchFirstTarget(int[] nums,int target){
        int l = 0;
        int r = nums.length-1;
        int res = -1;
        while(l<=r){
            int mid = l + (r-l)/2;
            if( target <= nums[mid]){
                r = mid -1;
            }else{
                l = mid + 1;
            }
            if(target == nums[mid]){
                res = mid;
            }
        }
        return res;
    }

    //查找最后一个target元素的小标
    private int binarySearchLastTarget(int[] nums,int target){
        int l = 0;
        int r = nums.length-1;
        int res = -1;
        while(l<=r){
            int mid = l + (r-l)/2;
            /*if( target <= nums[mid]){
                r = mid -1;
            }else{
                l = mid + 1;
            }*/
            if(target >= nums[mid]){
                l = mid + 1;
            }else{
                r = mid - 1;
            }
            if(target == nums[mid]){
                res = mid;
            }
        }
        return res;
    }
}
posted @ 2024-02-01 22:45  行行行行星  阅读(15)  评论(0)    收藏  举报