這題是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