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

发布时间:2024年01月19日

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

解题思路

  • 改造二分查找算法
  • 寻找目标的左边界
  • 寻找目标的右边界

class Solution {
    public int[] searchRange(int[] nums, int target) {
        // 二分查找的搜索左边界和搜索有边界
        int left = left_bound(nums,target);
        int right = right_bound(nums,target);
        return new int[]{left,right};

    }

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

        while(left <= right){
            int mid = (right - left) / 2 + left;

            if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid - 1;
            }else if(nums[mid] == target){
                // 寻找左边界 那么需要收缩右边界
                right = mid - 1;
            }
        }

        if(left >= nums.length || nums[left] != target){
            return -1;
        }

        return left;
    }

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

        while(left <= right){
            int mid = (right - left) / 2 + left;

            if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid - 1;
            }else if(nums[mid] == target){
                // 寻找右边界 那么收缩左边界
                left = mid + 1;
            }
        }

        if(right < 0 || nums[right] != target){
            return -1;
        }

        return right;
    }
}
文章来源:https://blog.csdn.net/qq_44653420/article/details/135694792
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。