Find Minimum in Rotated Sorted Array 题解

题目来源:Find Minimum in Rotated Sorted Array

> Suppose a sorted array 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). Find the minimum element. You may assume no duplicate exists in the array.

解题思路:

rotate总是至少有一半是有序的,可以根据这一半有序的值去二分。跟Search in Rotated Sorted Array一样。

int findMin(vector<int> &num) 
{
   assert(num.size() != 0);
   if(num.size() == 1) return num[0];
   int result = INT_MAX;
   int left = 0; int right = num.size() - 1;
   while(left <= right)
   {
       int mid = left + ((right - left)>>1);
       if (num[mid] < num[right])//right is sorted
       {
           result = std::min(result, num[mid]);
           right = mid-1;
       }else if(num[left] <= num[mid]) //left is sorted, left maybe equals mid
       {
           result = std::min(result, num[left]);
           left = mid+1;
       }
   }
   return result;
}

Last updated

Was this helpful?