1. 程式人生 > >[Leetcode]33. Search in Rotated Sorted Array

[Leetcode]33. Search in Rotated Sorted Array

思路很簡單,分類討論:

如果要查詢的數小於陣列第一個數,那就在旋轉後的後半陣列

如果要查詢的數大於陣列第一個數,那就在前半陣列找

坑點:

 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;
        
    }
};