目录/Table of Content
第二十五天问:Find Minimum in Rotated Sorted Array II
这次题目是之前那道 Find Minimum in Rotated Sorted Array 的拓展:给出一个列表,列表中的数字是可能有多于一次重复,而且排列从小到大的但可能分段前后调转。然后,我们需要从这列表中,找出其中最小的一个。
大家好,我是一个喜欢研究算法、机械学习和生物计算的小青年,我的CSDN博客是:一骑代码走天涯
如果您喜欢我的笔记,那么请点一下关注、点赞和收藏。如果內容有錯或者有改进的空间,也可以在评论让我知道。😄
题目&示例 (引用自 LeetCode)
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
Notes:
- This is a follow up problem to Find Minimum in Rotated Sorted Array.
- Would allow duplicates affect the run-time complexity? How and why?
解题思路
因为数字具有重复性,所以无法利用二分查找法的机制,也就是无法取得 O( log n \log n logn) 的时间复杂度。比较简单的方法,就是一个个的搜,直到找到最小的那个数字,时间复杂度为_O_( n n n)。
代码
时间复杂度:O(
n
n
n)
空间复杂度:O(
1
1
1)
class Solution:
def findMin(self, nums: List[int]) -> int:
if len(nums) == 1:
return nums[0]
start = 0
res = nums[0]
while start < len(nums):
if nums[start] <= res:
res = nums[start]
start += 1
return res