/**
[1,8,6,2,5,4,8,3,7]
双指针算法
left指向头,right指向尾
这时应该移动left还是right呢
1. 应该移动高度小的那个位置
height[left] <= height[right]
1.1 移动left指针,若移动时,while height[left+1] <= height[left] left++; 因为比height[left]还小,面积肯定更小,实际就是找到第一个比height[left]大的数
1.2 移动right指针时,同理
*/
func maxArea(height []int) int {
// left指向头,right指向尾
left, right := 0, len(height) - 1
ans := (right - left) * min(height[right], height[left])
for ;left < right; {
if height[right] >= height[left] {
for i:=left+1;height[left] > height[i] && i < right; i++{
left = i
}
left++
if ans < (right - left) * min(height[right], height[left]) {
ans = (right - left) * min(height[right], height[left])
}
} else {
for i:=right-1;height[right] > height[i] && i > left; i--{
right = i
}
right--
if ans < (right - left) * min(height[right], height[left]) {
ans = (right - left) * min(height[right], height[left])
}
}
}
return ans
}
func min(x, y int) int {
if x > y {
return y
}
return x
}
LeetCode 11. 盛最多水的容器
最新推荐文章于 2024-05-04 03:45:26 发布