思路: binary search。分三种情况(mid > target; mid < target; mid = target)。唯一稍微复杂一点情况的就是mid = target的时候,因为可能存在重复。遇到这个情况的时候,就分别判断left和right是否和mid相等,left相等的话就left++ ,right相等的话就right–。结束情况就是left = mid = right的时候,退出循环,返回结果。下面展示代码:
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] res = new int[2];
res[0] = -1; res[1] = -1;
int left = 0, right = nums.length - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(nums[mid] < target) left = mid + 1;
else if(nums[mid] > target) right = mid - 1;
else{
if(nums[mid] != nums[left]) left++;
if(nums[mid] != nums[right]) right--;
if(nums[left] == nums[mid] && nums[mid] == nums[right]){
res[0] = left;
res[1] = right;
return res;
}
}
}
return res;
}
}
总结: 无