169 - 153 寻找旋转排序数组最小值 - 006
题目
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
请找出其中最小的元素。
你可以假设数组中不存在重复元素。
示例 1:
输入: [3,4,5,1,2] 输出: 1
示例 2:
输入: [4,5,6,7,0,1,2] 输出: 0
解答
二分法
class Solution:
def findMin(self, nums: List[int]) -> int:
if not nums:
return 0
left = 0
right = len(nums)-1
while left < right:
mid = left + ((right-left) >> 1)
if nums[right] < nums[mid]:
left = mid+1
else:
right = mid
return nums[left]
Runtime: 28 ms, faster than 99.79% of Python3 online submissions for Find Minimum in Rotated Sorted Array.
Memory Usage: 12.8 MB, less than 100.00% of Python3 online submissions for Find Minimum in Rotated Sorted Array.
func findMin(nums []int) int {
if nums == nil {
return 0
}
if len(nums) == 1 {
return nums[0]
}
left := 0
right := len(nums) - 1
for left < right {
mid := left + ((right - left) >> 1)
if nums[right] < nums[mid] {
left = mid + 1
} else {
right = mid
}
}
return nums[left]
}
Runtime: 0 ms, faster than 100.00% of Go online submissions for Find Minimum in Rotated Sorted Array.
Memory Usage: 2.5 MB, less than 100.00% of Go online submissions for Find Minimum in Rotated Sorted Array.
var findMin = function(nums) {
if (nums.length == 0) {
return 0
}
if (nums.length == 1) {
return 1
}
let left = 0
right = nums.length - 1
while (left < right) {
let mid = left + ((right - left) >> 1)
if (nums[right] < nums[mid]) {
left = mid + 1
} else {
right = mid
}
}
return nums[left]
};
Runtime: 56 ms, faster than 65.35% of JavaScript online submissions for Find Minimum in Rotated Sorted Array.
Memory Usage: 33.8 MB, less than 75.00% of JavaScript online submissions for Find Minimum in Rotated Sorted Array.
分治
class Solution:
def findMin(self, nums: List[int]) -> int:
if not nums:
return 0
if len(nums) == 1:
return nums[0]
def helper(left, right):
if left == right:
return nums[left]
if left + 1 == right:
return min(nums[left], nums[right])
mid = left + ((right-left) >> 1)
return min(helper(left, mid), helper(mid+1, right))
return helper(0, len(nums)-1)
Runtime: 36 ms, faster than 94.37% of Python3 online submissions for Find Minimum in Rotated Sorted Array.
Memory Usage: 13 MB, less than 100.00% of Python3 online submissions for Find Minimum in Rotated Sorted Array.
Last updated
Was this helpful?