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.
这题和前面一题的区别在于有存在dupliacte的情况
第一种情况是在头和尾存在duplicate 1,1,1,7,89,90,0,11111
第二种情况是中间存在duplicate 所以在查找的时候要依次比较 num[mid] num[low] num[high]
如果duplicate 就只移动一位。
所以最差的时间复杂度是O(n)
There are two cases of duplicates, one on the head and tail. Another happens in the mid.
when encounter duplicates we can only move one step. So the worst case would be O(n)
code is as follow:
class Solution: # @param num, a list of integer # @return an integer def findMin(self, num): low=0 high=len(num)-1 while low<high and num[low]>=num[high]: mid=low+(high-low)/2 if num[mid]==num[high]: high-=1 elif num[mid]==num[low]: low+=1 elif num[mid]<num[high]: high=mid else: low=mid+1 return num[low]