LeetCode 81 搜索旋转排序数组

  • 分析

    这个题目和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);
    }
};

猜你喜欢

转载自blog.csdn.net/xiaoan08133192/article/details/108560510
今日推荐