5旋转数组的最小数字

5旋转数组的最小数字

 
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
有重复元素。
思路:使用二分搜索,nums[mid]元素和当前nums[end]做比较,如果大于end,则mid在上半段,否则在下半段。注意等于的时候要--end。
/**
 * 
 * @param rotateArray int整型一维数组 
 * @return int整型
*/
func minNumberInRotateArray(nums []int) int {
    low, high := 0, len(nums) - 1
    for low < high {
        pivot := low + (high - low) / 2
        if nums[pivot] < nums[high] {
            high = pivot
        } else if nums[pivot] > nums[high] {
            low = pivot + 1
        } else {
            high--
        }
    }
    return nums[low]
}
 
原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14629791.html