5旋转数组的最小数字
5旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
有重复元素。
思路:使用二分搜索
- 如果
nums[mid] > nums[right],说明最小值在右半部分,将左指针left移动到mid + 1。 - 如果
nums[mid] < nums[right],说明最小值在左半部分或者就是nums[mid],将右指针right移动到mid。 - 如果
nums[mid] == nums[right],无法确定最小值在左半部分还是右半部分,将右指针right向前移动一位。
func minNumberInRotateArray( nums []int ) int {
// write code here
if len(nums) == 0 {
return -1
}
start := 0
end := len(nums) - 1
mid := start + (end - start) / 2
for start + 1 < end {
mid = start + (end - start) / 2
if nums[mid] > nums[end] {
start = mid + 1
} else if nums[mid] < nums[end] {
end = mid
} else {
end--
}
}
if nums[start] < nums[end] {
return nums[start]
}
return nums[end]
}

浙公网安备 33010602011771号