解法:
解题思路
看代码,nums 有序,先二分找 target,如果找到 target 则向前找是否还有 target,这个过程中不断更新 start 指针,end 则是相反的向后查找
算法流程
代码
class Solution { public int[] searchRange(int[] nums, int target) { if(nums.length == 0) return new int[]{-1, -1}; int l = 0, r = nums.length - 1; int start = -1, end = -1; while(l <= r) { int mid = ((r-l)>>1)+l; if(nums[mid] == target) { start = mid; r = mid - 1; } else if(nums[mid] > target) r = mid - 1; else l = mid + 1; } l = 0; r = nums.length - 1; while(l <= r) { int mid = ((r-l)>>1)+l; if(nums[mid] == target) { end = mid; l = mid + 1; } else if(nums[mid] > target) r = mid - 1; else l = mid + 1; } return new int[]{start, end}; } }
细节
第二次记得重新初始化边界
l = 0; r = nums.length - 1;
如果为空数组则直接返回
if(nums.length == 0) return new int[]{-1, -1};