1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public int[] searchRange(int[] nums, int target) { int n = nums.length; if (n == 0) return new int[]{-1, -1};
int left = binarySearch(nums, 0, n - 1, target, true); if (left == -1) return new int[]{-1, -1}; int right = binarySearch(nums, left, n - 1, target, false); return new int[]{left, right}; }
private int binarySearch(int[] nums, int left, int right, int target, boolean findFirst) { int result = -1; while (left <= right) { int pos = left + (right - left) / 2; if (nums[pos] == target) { result = pos; if (findFirst) { right = pos - 1; } else { left = pos + 1; } } else if (nums[pos] < target) { left = pos + 1; } else { right = pos - 1; } } return result; } }
|