-
2.14
- 。。。
-
1.31
- 在子函数中,声明全局结果变量,注意找左边时,需要 right = mid-1 成立,也就是说
nums[mid]>=target
- 在子函数中,声明全局结果变量,注意找左边时,需要 right = mid-1 成立,也就是说
-
11.17
- 第一次没做出来没绷住,其实就是分别查左和右,
- 左边时,即时相等也缩做边界,同时保存目前的ans,以防没找到,如果找到就直接更新ans了
- 右边同理
class Solution {
public int[] searchRange(int[] nums, int target) {
int left = findFirst(nums,target);
int right = findLast(nums,target);
return new int[]{left,right};
}
public int findFirst(int[] nums,int target){
int left = 0;
int right = nums.length-1;
int ans = -1;
while(left<=right){
int mid = (right+left)/2;
if(nums[mid]>=target){
right = mid-1;
}else{
left = mid+1;
}
if(nums[mid]==target) ans = mid;
}
return ans;
}
public int findLast(int[] nums,int target){
int left = 0;
int right = nums.length-1;
int ans = -1;
while(left<=right){
int mid = (left+right)/2;
if(nums[mid]<=target){
left = mid+1;
}else{
right = mid-1;
}
if(nums[mid]==target) ans= mid;
}
return ans;
}
}