题解 | #旋转数组的最小数字#
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
解题思路
方法一:二分查找
将中间的与最右边的比。最难注意的是,当有相同的元素的时候,要一个一个去移动右边的元素。
复杂度:
时间复杂度为O(logn),空间复杂度为O(1)。
class Solution:
def minNumberInRotateArray(self , nums: List[int]) -> int:
# write code here
left = 0
right = len(nums)-1
while left < right:
mid = (left+right)//2
print(mid)
if nums[mid] > nums[right]:
left = mid + 1
elif nums[mid] == nums[right]:
right -= 1
else:
right = mid
return nums[left]
方法二:数组性质
时间复杂度为O(n),空间复杂度为O(1)。
class Solution:
def minNumberInRotateArray(self , nums: List[int]) -> int:
# write code here
return nums[(nums.index(min(nums)))]
