154. Find Minimum in Rotated Sorted Array II

class Solution(object):
    def findMin(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        left = 0
        right = len(nums) - 1
        while left + 1 < right:
            if nums[left] == nums[right]:  # must be a horizontal line on the left
                value = nums[left]
                while nums[left] == value:
                    if left == right:
                        return value # all the item is same
                    left += 1
            mid = left + (right - left)/2
            if nums[mid] >= nums[left] and nums[mid] <= nums[right]:
                return nums[left]
            elif nums[mid] >= nums[left]:
                left = mid
            else:
                right = mid
        return min(nums[left], nums[right])

blogroll

social