Find Minimum in Rotated Sorted Array II
Suppose a sorted array 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.
Example
Given [4,4,5,6,7,0,1,2] return 0.
Solution
// 这道题目在面试中不会让写完整的程序
// 只需要知道最坏情况下 \[1,1,1....,1\] 里有一个0
// 这种情况使得时间复杂度必须是 O\(n\)
// 因此写一个for循环就好了。
// 如果你觉得,不是每个情况都是最坏情况,你想用二分法解决不是最坏情况的情况,那你就写一个二分吧。
// 反正面试考的不是你在这个题上会不会用二分法。这个题的考点是你想不想得到最坏情况。
重复元素出现在pivot 点时候需要考虑动态的删除最后一个元素。
end = end - 1
class Solution:
# @param num: a rotated sorted array
# @return: the minimum number in the array
def findMin(self, num):
# write your code here
start, end = 0, len(num) - 1
while start + 1 < end:
mid = (start+end)/2
if num[mid] > num[end]:
start = mid
elif num[mid] < num[end]:
end = mid
else:
end = end - 1
return min(num[start], num[end])
Last updated
Was this helpful?