题目:
Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
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.
题解:时间复杂度会退化为O(n),因为有可能low = mid = high,这时候只能low = low + 1,最坏情况所有元素都相等,需要扫描所有元素才能求出最小值。
c++版:
class Solution { public: int findMin(vector<int> &num) { if(!num.size()) return num[0]; int low = 0, high = num.size()-1; while(low < high && num[low] >= num[high]) { int mid = (low + high) / 2; if(num[low] > num[mid]) high = mid; else if(num[mid] > num[high]) low = mid + 1; else low = low + 1; } return num[low]; } };
public class Solution { public int findMin(int[] num) { if(num.length == 1) return num[0]; int low = 0, high = num.length-1; while(low < high && num[low] >= num[high]) { int mid = (low + high) / 2; if(num[low] > num[mid]) high = mid; else if(num[mid] > num[high]) low = mid + 1; else low = low + 1; } return num[low]; } }
class Solution: # @param num, a list of integer # @return an integer def findMin(self, num): if len(num) == 1: return num[0] low = 0 high = len(num)-1 while low < high and num[low] >= num[high]: mid = (low + high) / 2 if num[mid] < num[low]: high = mid elif num[mid] > num[high]: low = mid + 1 else: low = low + 1 return num[low]