题目意思是,返回数组中某个数的起始位置。
由于这道题已被臭臭剧透过了,所以做起来只要按照思路写就可以了····
discuss里面看到很多大神用二分搜索之类,震惊!
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int start=-1;int end=-1;
for(int i=0;i<nums.size();++i){
if(nums[i]==target) {
start=i; break;
}
//else start=-1;
}
for(int i=nums.size()-1;i>=0;--i){
if(nums[i]==target){
end=i; break;
}
//else end=-1;
}
return {start,end};
}
};
还可以用二分法进行解答
对于有序的vector数列,找到target对应的begin和end位置,如果数列中不存在target,则返回[-1, -1]。
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
bool isFind=false;
vector<int> ans;
while(1){
int dis=right-left;
//cout<<"dis= "<<dis<<endl;
if(dis<=1){
if(nums[left]==target || nums[right]==target){
isFind=true;
}
break;
}
int mid=(right-left)/2;
if(nums[left+mid]>target){
right=left+mid;
}else if(nums[left+mid]<target){
left=left+mid;
}else{
isFind=true;
break;
}
}
if(isFind){
for(int i=left; i<=right; i++){
if(nums[i]==target){
ans.push_back(i);
break;
}
}
for(int i=right; i>=left; i--){
if(nums[i]==target){
ans.push_back(i);
break;
}
}
}else{
ans.push_back(-1);
ans.push_back(-1);
}
return ans;
}
};