二分法

  • 在一个有序数组中找 <= 某个数最右的位置 和 >= 某个数最左的位置
  • 举例子,找<=7最右的位置
    • image.png
  • 举例子,找 >= 7最左的位置

    • image.png
  • 本题解法就是上边那两个方法嘛, 一个找最左边的,一个找最右边的 ```java public int[] searchRange(int[] nums, int target) { int[] ans = {-1, -1}; if (nums == null || nums.length == 0) {

    1. return ans;

    } ans[0] = findFirst(nums, target); ans[1] = findLast(nums, target); return ans; }

public int findFirst(int[] nums, int num) { int end = nums.length; int begin = 0; int location = -1; while (begin < end) { int mid = (begin + end) >> 1; if (num < nums[mid]) { end = mid; } else if (num > nums[mid]) { begin = mid + 1; } else { end = mid; location = mid; } } return location; }

public int findLast(int[] nums, int num) { int end = nums.length; int begin = 0; int location = -1; while (begin < end) { int mid = (begin + end) >> 1; if (num < nums[mid]) { end = mid; } else if (num > nums[mid]) { begin = mid + 1; } else { begin = mid + 1; location = mid; } } return location; } ```