——Search in Rotated Sorted Array

33、Search in Rotated Sorted Array

搜索旋轉排序數組

假設有一個排序的按未知的旋轉軸旋轉的數組(比如,0 1 2 4 5 6 7 可能成爲4 5 6 7 0 1 2)。給定一個目標值進行搜索,如果在數組中找到目標值返回數組中的索引位置,否則返回-1。

你可以假設數組中不存在重複的元素。

樣例

給出[4, 5, 1, 2, 3]和target=1,返回 2

給出[4, 5, 1, 2, 3]和target=0,返回 -1

分析:

找出旋轉點,然後二分查找。

代碼:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章