1刷
还是二分查找的练习,学会lower_bound和upper_bound的方法果然一次AC!!!
Important!!!
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int>se;
int len = nums.size();
int first = 0;
while(len > 0){
int half = len >> 1;
int mid = first + half;
if(nums[mid] < target){
first = mid + 1;
len = len - half - 1;
}
else
len = half;
}
if(first == nums.size()){
se.push_back(-1);
se.push_back(-1);
return se;
}
else if(nums[first] != target){
se.push_back(-1);
se.push_back(-1);
return se;
}
se.push_back(first);
first = 0;
len = nums.size();
while(len > 0){
int half = len >> 1;
int mid = first + half;
if(nums[mid] > target)
len = half;
else{
first = mid + 1;
len = len - half - 1;
}
}
se.push_back(first - 1);
return se;
}
};
这题要3刷,超级好题!用来复习无敌2分,2分还有一个模板需要练习就是就求最小值,上一题还是上上提有。
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int>ve;
int first = 0, middle;
int half, len = nums.size();
while(len > 0){
half = len >> 1;
middle = first + half;
if(nums[middle] < target){
first = middle + 1;
len = len - half - 1;
}
else len = half;
}
if(nums.size() == 0 || first >= nums.size() || nums[first] != target){
ve.push_back(-1);
ve.push_back(-1);
return ve;
}
ve.push_back(first);
first = 0;
len = nums.size();
while(len > 0){
half = len >> 1;
middle = first + half;
if(nums[middle] > target){
len = half;
}
else{
first = middle + 1;
len = len - half - 1;
}
}
ve.push_back(first - 1);
return ve;
}
};