leetcode34. Search for a Range
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> result = {};
if(nums.size()<1){
result.push_back(-1);
result.push_back(-1);
return result;
}
if(nums.size()==1){
if(nums[0] == target){
result.push_back(0);
result.push_back(0);
}else{
result.push_back(-1);
result.push_back(-1);
}
return result;
}
int left = 0;
int right = nums.size() - 1;
int medium = left+(right - left) / 2;
left = searchLeftPos(nums,target,left,medium);
right = searchRightPos(nums,target,medium+1,right);
if(left == -1){
left = searchLeftPos(nums,target,medium+1,right);
}
if(right == -1){
right = searchRightPos(nums,target,left,medium);
}
result.push_back(left);
result.push_back(right);
return result;
}
int searchLeftPos(vector<int>& nums, int target,int left, int right){
if(right<=left){
if(target==nums[left]) return left;
else return -1;
}
int medium = left+(right - left) / 2;
left = searchLeftPos(nums,target,left,medium);
if(left == -1){
left = searchLeftPos(nums,target,medium+1,right);
}
return left;
}
int searchRightPos(vector<int>& nums, int target,int left, int right){
if(right<=left){
if(target==nums[left]) return left;
else return -1;
}
int medium = left+(right - left) / 2;
right = searchRightPos(nums,target,medium+1,right);
if(right == -1){
right = searchRightPos(nums,target,left,medium);
}
return right;
}
};
本文详细解析了LeetCode第34题Search for a Range的解决方案,通过递归二分查找的方式找到目标值在有序数组中首次和末次出现的位置。文章提供了完整的C++实现代码,并针对不同输入情况进行了讨论。
446

被折叠的 条评论
为什么被折叠?



