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
}