[Leetcode]33. Search in Rotated Sorted Array

版权声明:转载请联系博主 https://blog.csdn.net/zxtalentwolf/article/details/84331136

思路很简单,分类讨论:

如果要查找的数小于数组第一个数,那就在旋转后的后半数组

如果要查找的数大于数组第一个数,那就在前半数组找

坑点:

 1.注意空输入

 2.注意看是否有可能有重复的数存在,这个题是没有重复的数的

//剑指offer上面有
const int x=[]{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return 0;
}();
class Solution {
public:
    int search(vector<int>& nums, int target) {
        if(nums.empty()) return -1;
        if(target >= nums[0]){
            int l = 0;
            int r = nums.size() - 1;
            while(l <= r){
                int m = l + ((r - l) >> 1);
                if(nums[m] == target) return m;
                if(nums[m] < nums[0]){
                    r = m - 1;
                    continue;
                }
                if(nums[m] < target){
                    l = m + 1;
                }else{
                    r = m - 1;
                }
            }
            
        }else if(target <= nums[nums.size()-1]){
            int l = 0;
            int r = nums.size() - 1;
            while(l <= r){
                int m = l + ((r - l) >> 1);
                if(nums[m] == target) return m;
                if(nums[m] > nums[nums.size()-1]){
                    l = m + 1;
                    continue;
                }
                if(nums[m] < target){
                    l = m + 1;
                }else{
                    r = m - 1;
                }
            }
            
        }
        return -1;
        
    }
};

猜你喜欢

转载自blog.csdn.net/zxtalentwolf/article/details/84331136