这题是153的延伸,区别就是允许重复数字的出现。因此增加了一个当first = mid = last时,按顺序查找最小值。(此题特别注意是各种等号要加进去,不然就会判断错误)
class Solution(object):
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
first = 0
last = len(nums) - 1
flag = 0
while nums[first] >= nums[last]:
flag = 1
if last - first == 1:
mid = last
break
mid = (first + last)//2
if nums[first] == nums[mid] and nums[mid] == nums[last]:
return self.inorderNum(nums,first,last)
if nums[mid] >= nums[first]:
first = mid
elif nums[mid] <= nums[first]:
last = mid
print(flag)
if flag == 0:
return nums[0]
else:
return nums[mid]
def inorderNum(self,nums,first,last):
result = nums[first]
for i in range(first+1,last+1):
if result > nums[i]:
result = nums[i]
return result