题目
给定一个长度为 n 的整型数组 height。有 n 条垂线,第 i 条垂线的高为 height[i]。
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,第2条垂线高度为8,第9条垂线高度为7,(9-2)x7=49,故容器能够容纳水(表示为蓝色部分)的最大值为 49。
原题链接: https://leetcode-cn.com/problems/container-with-most-water/
思路
木桶盛水的高度取决于最短的那块板。我们采用双指针法,从数组的两端向内移动,每次只移动最短的那一边,往里收缩。因为如果移动的不是最短的那一边,那么宽 -1 的同时,高度没有变,那么能剩的水肯定变少了。
- 复杂度分析
- 时间复杂度 O(n)。
- 空间复杂度 O(1)。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
int maxArea(vector<int>& height) {
int left = 0;
int right = height.size() - 1;
int result = -1;
while(left < right) {
int cur = (right - left) * min(height[left], height[right]);
result = max(result, cur);
if (height[left] < height[right]) {
left++;
}
else {
right--;
}
}
return result;
}
};