154 Find Minimum in Rotated Sorted Array II
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.
The array may contain duplicates.
//方法一:正常的解法 class Solution { public: int findMin(vector<int> &num) { if( num.size()==0 ) return NULL; int length = num.size(); int left = 0; int right = length-1; int mid = left; while( num[left] >= num[right]) { if( right-left == 1) { mid = right; break; } mid = (left+right)/2; if( num[left]==num[right] && num[left]==num[mid] ) { int result = num[left]; for( int i=left+1 ; i<=right; i++) { if( result > num[i] ) result = num[i]; } return result; } if( num[left] <= num[mid] ) left = mid; else if ( num[right] >= num[mid] ) right = mid; } return num[mid]; } };
//方法二:网上方法,记住前面的方法即可 class Solution { public: int findMin(vector<int> &num) { if( num.size()==0 ) return NULL; int length = num.size(); int left = 0; int right = length-1; while( left<right ) { int mid = (left+right)/2; if( num[left] == num[right] ) left++; else if ( num[left] < num[right] ) break; else { if( num[left] <= num[mid]) left = mid+1; else if ( num[right] >= num[mid] ) right = mid; } } return num[left]; } };
leetcode_154_Find Minimum in Rotated Sorted Array II
原文地址:http://blog.csdn.net/keyyuanxin/article/details/44197107