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


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