題目鏈接:https://leetcode.com/problems/container-with-most-water/
一開始我採用了遍歷對比了每個可能的面積,後來參考了題目裏給出的解決思路:
面積由距離和高度決定,而兩個指定點之間的面積大小由矮的那個點決定,所以,先算出距離最長的兩個點之間的面積。假設高的點b在最右端,這時如果把點b往左移動,面積是隻可能變小,因爲距離變小,而面積由矮的點a乘距離算出,所以,這時應該把點a右移,然後算出面積進行對比,以此類推,時間複雜度爲o(n)
func maxArea(height []int) int {
ret := 0
l := 0
r := len(height) - 1
for {
if l == r {
break
}
h := height[r]
d := r - l
if height[l] < height[r] {
h = height[l]
l++
} else {
r--
}
container := h * d
if container > ret {
ret = container
}
}
return ret
}