- 分析
这个题目和LeetCode 33相比,数组中可能会有重复的数,所以需要进行特殊处理。因为这个时候既要向左搜索,又要向右搜索。关键逻辑在这篇博客中已经详细的介绍了https://blog.csdn.net/xiaoan08133192/article/details/108438402
- 代码
class Solution {
public:
bool find(vector<int>& nums, int start, int end, int target){
if(start > end || start >= nums.size()){
return false;
}
int mid = (start + end) / 2;
if(nums[mid] == target){
return true;
}
if(nums[mid] == nums[start]){//这个时候既要向左搜也要向又搜
return find(nums, start, mid - 1, target) || find(nums, mid + 1, end, target);
}
if(nums[mid] > nums[start] && target >= nums[start] && target < nums[mid] ||
nums[mid] < nums[start] && target < nums[mid] ||
nums[mid] < nums[start] && target >= nums[start]){
return find(nums, start, mid - 1, target);
}else{
return find(nums, mid + 1, end, target);
}
}
bool search(vector<int>& nums, int target) {
return find(nums, 0, nums.size(), target);
}
};