007_盛最多水的容器

知识点:双指针

LeetCode第十一题:https://leetcode-cn.com/problems/container-with-most-water/

题目不难,一开始可以很直接想到朴素解法,但是时间复杂度太高(n平方),以为能够用DP优化,看遍题目也没找到可以优化的重叠子问题。讲真,不看题解是很难想到用双指针的,解题思路解题思路,真是解过之后才有思路啊,很多题目没做过之前很难能够想到是那样解的,怪不得大部分人一刷的时候各种被打击信心,后面二刷三刷才开始有感觉,耐心点坚持下去吧。

语言:GoLang

// 双指针版本,想不到
func maxArea(height []int) int {
    hLen := len(height)

    ans := 0
    l, r := 0, hLen - 1
    for l < r {
        ans = max(ans, min(height[l], height[r]) * (r - l))
        if height[l] < height[r] {
            l++
        }else {
            r--
        }
    }
    return ans
}






// 第一种思路,朴素解法:以len为准,从1到大迭代
func maxArea_(height []int) int {
    hLen := len(height)

    ans := 0
    for length := 1; length < hLen; length++ {
        for i := 0; i < hLen - length; i++ {
            ans = max(ans, min(height[i], height[i + length]) * length)
        }
    }
    return ans
}

func min(a int, b int) int {
    if a > b {
        return b
    }
    return a
}

func max(a int, b int) int {
    if a > b {
        return a
    }
    return b
}
posted @ 2020-03-03 18:28  Cenyol  阅读(68)  评论(0)    收藏  举报