Leetcode | 33. Search in Rotated Sorted Array

来源:互联网 发布:java 微信支付api 编辑:程序博客网 时间:2024/06/15 10:29

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

解法一:顺序检索,3ms AC,属于最快的那一波解法,想不到想不到。。。。

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

解法二:二分检索,先找出最小值(也就是翻转的那个下标),然后根据target的大小,分两段二分检索。9ms,震惊,居然很慢。。。

class Solution {public:    int search(vector<int>& nums, int target)    {        int len = nums.size();        int left = 0, right = len-1;        if(nums.size() == 0)            return -1;        while(left < right)        {            int mid = (left+right)/2;            if(nums[mid] > nums[right])                left = mid+1;            else                right = mid;        }        //当 left=right 时,找到了最小值,也就是翻转的位置        int rotate = left;        cout<<rotate<<endl;        if(target > nums[len-1])//在左半部分        {            left = 0; right = rotate-1;        }        else        {            left = rotate; right = len-1;        }        while(left <= right)    //处理只有一个元素的情况        {            int mid = (left+right)/2;            if(nums[mid] == target)                return mid;            else if(nums[mid] > target)                right = mid-1;            else                left = mid+1;        }        return -1;    }};
原创粉丝点击