LeetCode 34. Find First and Last Position of Element in Sorted Array(在排序数组中查找元素的第一个和最后一个位置)

  1. Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.
  2. Your algorithm’s runtime complexity must be in the order of O(log n).
  3. If the target is not found in the array, return [-1, -1].
Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]
class Solution {
    public int[] searchRange(int[] nums, int target) {
        int [] res = new int[2];

        res[0] = searchLeft(nums, target);
        res[1] = searchRight(nums, target);

       return res;
    }

    public int searchLeft(int[] nums, int target) {
        int left = 0, right =  nums.length - 1;

        while(left <= right) {
            int mid = left + (right - left) / 2;
            if(nums[mid] > target) {
                right = mid - 1;
            }
            else if(nums[mid] < target) {
                left = mid + 1;
            }
            //进一步缩小搜索区间
            else if(nums[mid] == target) {
                right = mid - 1;
            }
        }
        // 最后要检查 left 越界的情况
        if(left <= nums.length - 1 && nums[left] == target) {
            return left;
        }
        else {
            return -1;
        }
    }
    public int searchRight(int[] nums, int target) {
        int left = 0, right =  nums.length - 1;
        
        while(left <= right) {
            int mid = left + (right - left) / 2;
            if(nums[mid] > target) {
                right = mid - 1;
            }
            else if(nums[mid] < target) {
                left = mid + 1;
            }
            //向右缩小区间
            else if(nums[mid] == target) {
                left = mid + 1;
            }
        }
        if(right >= 0 && nums[right] == target) {
            return right;
        }
        else {
            return -1;
        }
    }
}
发布了581 篇原创文章 · 获赞 97 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/gx17864373822/article/details/104864418