class Solution { int[] searchRange(int[] nums, int target) { int leftBorder = getLeftBorder(nums, target); int rightBorder = getRightBorder(nums, target); // 情况一 if (leftBorder == -2 || rightBorder == -2) { return new int[] {-1, -1}; } // 情况三 if (rightBorder - leftBorder > 1) { return new int[] {leftBorder+1,rightBorder - 1}; } // 情况二 return new int[] {-1, -1}; }
int getRightBorder(int[] nums, int target) { int left = 0; int right = nums.length - 1; int rightBorder = -2; while (left <= right) { int middle = left + ((right - left) / 2); if (nums[middle] > target) { right = middle - 1; } else { left = middle + 1; rightBorder = left; } } return rightBorder; }
int getLeftBorder(int[] nums, int target) { int left = 0; int right = nums.length - 1; int leftBorder = -2; while (left <= right) { int middle = left + ((right - left) / 2); if (nums[middle] >= target) { right = middle - 1; leftBorder = right; } else { left = middle + 1; } } return leftBorder; } }