盛最多水的容器c++代码
时间: 2024-09-08 08:04:46 浏览: 32
盛最多水的容器问题,是一个经典的算法问题,常常出现在编程面试中。问题的描述如下:给定一个长度为 n 的整数数组 height,其中每个元素代表一个宽度为 1 的柱子的高度,计算两个柱子之间能盛多少水。盛水的多少由两个柱子之间的距离和两个柱子较小的高度决定。
以下是使用C++实现的盛最多水的容器问题的示例代码:
```cpp
#include <vector>
#include <algorithm>
using namespace std;
int maxArea(vector<int>& height) {
int n = height.size();
if (n == 0) return 0;
int left = 0, right = n - 1;
int maxWater = 0;
while (left < right) {
int currentWater = min(height[left], height[right]) * (right - left);
maxWater = max(maxWater, currentWater);
if (height[left] <= height[right]) {
++left;
} else {
--right;
}
}
return maxWater;
}
```
在这段代码中,使用了双指针技巧。一开始指针left指向数组的开始,right指向数组的末尾。每次移动较短的柱子对应的指针,因为移动较长的柱子对应的指针不会增加盛水量,而移动较短的柱子可能会遇到更高的柱子从而增加盛水量。这样循环直到两个指针相遇,过程中计算并更新最大盛水量。