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]).
Find the minimum element.
The array may contain duplicates.
Example 1:
Input: [1,3,5]
Output: 1
Example 2:
Input: [2,2,2,0,1]
Output: 0
Note:
       This is a follow up problem to Find Minimum in Rotated Sorted Array.
       Would allow duplicates affect the run-time complexity? How and why?
class Solution:
     def findMin(self, nums):
         """
         :type nums: List[int]
         :rtype: int
         """
         start = 0
         end = len(nums) - 1
         while start < end:
             if start < len(nums) - 1 and nums[start] == nums[start + 1]:
                 start += 1
                 continue
             if nums[end] == nums[end - 1]:
                 end -= 1
                 continue
             mid = start + (end - start) // 2
             if nums[mid] > nums[end]:
                 start = mid + 1
             else:
                 end = mid
         return nums[start]

class Solution:
     def findMin(self, nums):
         """
         :type nums: List[int]
         :rtype: int
         """
         start = 0
         end = len(nums) - 1
         while start < end:
             if start < len(nums) - 1 and nums[start] == nums[start + 1]:
                 start += 1
                 continue
             if nums[end] == nums[end - 1]:
                 end -= 1
                 continue
             mid = start + (end - start) // 2
             if nums[mid] > nums[end]:
                 start = mid + 1
             else:
                 end = mid
         return nums[start]
