//盛最多水的容器:给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i, ai)。
// 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为(i, ai) 和(i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int maxArea(vector<int>& height) {
int left = 0, right = height.size() - 1;
int maxArea = 0;
int maxLeft = left, maxRight = right;
while (left < right) {
int currentArea = min(height[left], height[right]) * (right - left);
if (currentArea > maxArea) {
maxArea = currentArea;
maxLeft = left;
maxRight = right;
}
if (height[left] < height[right]) {
left++;
}
else {
right--;
}
}
return maxArea;
}
int main() {
vector<int> heights = { 2, 3, 1, 4, 6, 1, 3 };
cout << maxArea(heights);
//pair<int, int> result = maxArea(heights);
//cout << result.first << " " << result.second << endl;
return 0;
}
这篇文章介绍了一种解决盛最多水的容器问题的C++代码,利用区间选择算法动态计算两条垂直线之间的最大面积,适用于IT技术中的数据结构和算法问题。
545

被折叠的 条评论
为什么被折叠?



