Golang每日一练(leetDay0052) 寻找旋转排序数组中的最小值III
warning:
这篇文章距离上次修改已过190天,其中的内容可能已经有所变动。
题目:
给定一个非递减排序的数组 nums ,你需要在数组中找到某个数,它的大小大于等于数组中的其他数两倍。
如果有多个数满足条件,返回任何一个即可。
示例 1:
输入:nums = [1,2,3,4,5]
输出:4
示例 2:
输入:nums = [4,5,6,7,0,1,2]
输出:0
提示:
- 1 <= nums.length <= 5000
- -2^31 <= nums[i] <= 2^31 - 1
解法:
func findMin(nums []int) int {
left, right := 0, len(nums)-1
for left < right {
mid := left + (right-left)/2
if nums[mid] > nums[right] {
left = mid + 1
} else {
right = mid
}
}
return nums[left]
}
这段代码使用了二分查找的变体来找到非递减数组中的最小值。如果数组是旋转排序数组,且最小值位于数组的右侧,那么最小值必然大于等于它左侧的任何一个值。根据这个性质,我们可以通过不断缩小搜索区间的方式找到最小值。
评论已关闭