20191022-leetcode-33搜索旋轉排序數組

在這裏插入圖片描述
分析:時間複雜度OlognO(logn),於是想到了二分查找。
把一個字符串從mid處切開,那麼必定一部分是有序的,另一部分是無序的。不斷切割,直到待查找的數落在了一個有序的區間內,二分查找即可。

class Solution {
public:
    int search(vector<int>& nums, int target)
    {
        int le=0,ri=nums.size()-1;
        int mid=le+(ri-le)/2;
        if(nums.size()==1&&nums[0]==target) return 0;
        while(le<=ri)
        {
            if(nums[mid]==target)return mid;
            if(nums[le]==target) return le;
            if(nums[ri]==target) return ri;

            //cout<<nums[mid]<<" "<<nums[le]<<" "<<nums[ri]<<endl;

            mid=le+(ri-le)/2;
            if(nums[le]<nums[mid])       //左半部分有序
            {
                if(nums[le]<target&&nums[mid]>target) {ri=mid-1;}
                else {le=mid+1;}
            }
            else                         //右半部分有序
            {
                if(nums[mid]<target&&target<nums[ri]){le=mid+1;}
                else {ri=mid-1;}
            }
        }
        return -1;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章