Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.
If target is not found in the array, return [-1, -1].
Example 1:
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]
Example 3:
Input: nums = [], target = 0
Output: [-1,-1]
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| class Solution { public int[] searchRange(int[] nums, int target) { int start = 0; int end = nums.length - 1; int[] ans = {-1, -1}; //test case is {} if(nums.length == 0) { return ans; } while(start <= end) { int mid = (start + end) / 2; if(target == nums[mid]) { //丢弃右边 end = mid - 1; } else if(target < nums[mid]) { end = mid - 1; } else { start = mid + 1; } } //考虑 tartget 是否存在,判断我们要找的值是否等于 target 并且是否越界 // if target existed, nums[start] == target if(start == nums.length || nums[start] != target) { return ans; } else { ans[0] = start; } ans[0] = start; start = 0; end = nums.length - 1; while(start <= end) { int mid = (start + end) / 2; if(target == nums[mid]) { //丢弃左边 start = mid + 1; } else if(target < nums[mid]) { end = mid - 1; } else { start = mid + 1; } } ans[1] = end; return ans; } }
|