小言_互联网的博客

旋转数组相关(未完成)

335人阅读  评论(0)

153. 寻找旋转排序数组中的最小值

解法1,遍历,时间复杂度O(N)

func findMin(nums []int) int {
    n := len(nums)
    if n == 0 {
        return 0
    }
    for i:=1;i<n;i++{
        if nums[i] < nums[i-1]{
            return nums[i]
        }
    }    
    return nums[0]
}

解法2,二分查找,时间复杂度O(log(N))

func findMin(nums []int) int {
    n := len(nums)
    if n == 0 {
        return 0
    }
    l,r := 0,n-1
    // 没有旋转
    if nums[l] < nums[r] {
        return nums[l]
    }

    // 对于旋转过的,如果中间大于左边,比如2,3,4,5,6,1。去中间的右边查找
    // 如果中间小于左边,去中间的6,1,2,3,4,5,去中间的左边找
    for l < r {
        mid := l + (r-l)/2
        // 终止条件
        if mid > 0 && nums[mid] < nums[mid-1] {
            return nums[mid]
        }else if mid + 1 < n && nums[mid] > nums[mid+1]{
            return nums[mid+1]
        }
        if nums[mid]>nums[l]{
            l = mid
        }else {
            r = mid
        }
    }
    return nums[l]
}

转载:https://blog.csdn.net/weixin_40108561/article/details/104417597
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场