• 2.14

    • 。。。
  • 1.31

    • 在子函数中,声明全局结果变量,注意找左边时,需要 right = mid-1 成立,也就是说 nums[mid]>=target
  • 11.17

    • 第一次没做出来没绷住,其实就是分别查左和右,
    • 左边时,即时相等也缩做边界,同时保存目前的ans,以防没找到,如果找到就直接更新ans了
    • 右边同理
class Solution {
    public int[] searchRange(int[] nums, int target) {
        int left = findFirst(nums,target);
        int right = findLast(nums,target);
        return new int[]{left,right};
    }
    public int findFirst(int[] nums,int target){
        int left = 0;
        int right = nums.length-1;
        int ans = -1;
        while(left<=right){
            int mid = (right+left)/2;
            if(nums[mid]>=target){
                right = mid-1;
            }else{
                left = mid+1;
            }
            if(nums[mid]==target) ans = mid;
        }
        return ans;
    }
    public int findLast(int[] nums,int target){
        int left = 0;
        int right = nums.length-1;
        int ans = -1;
        while(left<=right){
            int mid = (left+right)/2;
            if(nums[mid]<=target){
                left = mid+1;
            }else{
                right = mid-1;
            }
            if(nums[mid]==target) ans= mid;
        }
        return ans;
    }
}