问题:
记录自己 看完 代码随想录 34讲解的一些想法
解决:
class Solution{
public int[] searchRange(int[] nums, int target){
int rightBorder = RightBorder(nums,target);
int leftBorder = LeftBorder(nums,target);
if(rightBorder == -2 || leftBorder == -2) return new int[] {-1,-1};
/*
为什么这里条件要这样设置
因为后面的代码是
left = mid + 1;
rightBorder = mid;
right = mid - 1;
leftBorder = mid;
因为这里是用的mid + 1和mid-1后的值
因为int []nums={5,7,7,8,8,10};
例如上述情况,最后mid的值分别为3,4
4-3 = 1 就会错误判断成 不符合的情况
当用rightBorder 和 leftBorder的值
rightBorder - leftBorder = 1 直接可以判断为不符合情况
这样可以省很多事
*/
if(rightBorder - leftBorder > 1) return new int[] {leftBorder,rightBorder};
//if(rightBorder - leftBorder = 1) return new int[] {-1,-1};
return new int[] {-1,-1};
}
//右边界
public int RightBorder(int[] nums, int target){
int rightBorder = -2;
int left = 0;
int right = nums.length - 1;
while (left <= right){
int mid = (left+right) / 2;
if(nums[mid] > target){
right = mid - 1;
}else {
left = mid + 1;
rightBorder = mid;
}
}
return rightBorder;
}
public int LeftBorder(int[] nums, int target) {
int leftBorder = -2;
int left = 0;
int right = nums.length - 1;
while (left <= right){
int mid = (left + right) / 2;
if(nums[mid] >= target){
right = mid - 1;
leftBorder = mid;
}else {
left = mid+1;
}
}
return leftBorder;
}
}