Search in Rotated Sorted Array

Posted RenewDo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Search in Rotated Sorted Array相关的知识,希望对你有一定的参考价值。

 

看到题目写的hard,感觉走一边数组就可以了嘛

 1 class Solution {
 2 public:
 3     int search(vector<int>& nums, int target) {
 4         for(int i=0;i<nums.size();i++)
 5         {
 6             if(nums[i]==target) return i;
 7         }
 8          return -1;
 9     }
10 };

   以上时间是4ms.  

   还是觉得莫名其妙,被leetcode吓怕了,总觉得题目不会这么简单。

  看了下网上的解答,发现大家重点在复杂度上,而上面的复杂度为O(n)。

   下面是复杂度为O(log N)

序列:0 1 2 3  4 5 6 7 8

 

情况一:0在中间点左边

如:6 7 8 0 1 2 3 4  5       ;1是中间点,此时中间值小于最右边的值

 

情况二:0在中间点右边

如:3 4 5 6 7 8 0 1 2       ;7是中间点,此时中间值大于最右边

 

注意:上面的想法是基于序列是升序排列,若是降序,没有旋转的请款包含在情况二中,其它的则要颠倒

 1 class Solution {
 2 public:
 3     int search(vector<int>& nums, int target) {
 4     if(nums.size()<=0) return -1;
 5      int low=0,high=nums.size()-1;
 6      int mid,rot,remid;
 7      while(low<high)
 8      {
 9          mid=(low+high)/2;
10          if(nums[mid]<nums[high]) high=mid;
11          else low=mid+1;
12      }
13      rot=low;
14      low=0;high=nums.size()-1;
15      while(low<=high)
16      {
17          mid=(low+high)/2;
18          remid=(mid+rot)%nums.size();
19          if(nums[remid]==target) return remid;
20          else if(nums[remid]<target) low=mid+1;
21          else high=mid-1;
22      }
23      return -1;
24     }
25 };

 

以上是关于Search in Rotated Sorted Array的主要内容,如果未能解决你的问题,请参考以下文章

Search in Rotated Sorted Array

33. Search in Rotated Sorted Array

33. Search in Rotated Sorted Array

33. Search in Rotated Sorted Array

Leetcode Search in Rotated Sorted Array

33. Search in Rotated Sorted Array *HARD*