Search in Rotated Sorted Array

来源:互联网 发布:淘宝店铺简介如何写 编辑:程序博客网 时间:2024/06/03 13:55

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.

第一次提交的代码如下:

class Solution {  public:      int search(vector<int>& nums, int target) {          if(nums.empty())             return -1;         //二分查找最小的元素的下标         int start = 0;         int end = nums.size()-1;         while(start < end)         {             int mid = (start + end) / 2;             if(nums[mid] > nums[end])                 start = mid + 1;             else                 end = mid;//不是mid - 1         }         cout << "二分查找: start : " << start << " end: " << end <<endl;         int smallest = start;         start = 0;         end = nums.size() - 1;         while(start <= end)         {             int mid = (start + end) / 2;             int realmid = (mid + smallest) % nums.size();//想像成一个环             cout << "mid : " << mid << " realmid : " << realmid << endl;             if(nums[realmid] == target)                 return realmid;             else if(nums[realmid] < target)                 start = mid + 1;             else                 end = mid - 1;         }              return -1;      }  };

但是提交之后,效果并不是特别明显,后来又上网查了资料,修改成下面的代码:

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

参考链接:
Search in Rotated Sorted Array 解题报告

0 0