任意取两条线与x坐标轴构成容器的最大容量
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int maxArea(vector<int> &height) {
if (height.empty()) return 0;
int Area = 0;
int i = 0, j = height.size() - 1;
while (i < j)
{
if (height[i] <= height[j])
{
if (height[i] * (j - i) > Area) Area = height[i] * (j - i);
++i;
}
else
{
if (height[j] * (j - i) > Area) Area = height[j] * (j - i);
--j;
}
}
return Area;
}
};
int main()
{
int n;
Solution so;
while (cin >> n)
{
vector<int> height(n);
for (int i = 0; i < n; ++i) cin >> height[i];
cout << so.maxArea(height) << endl;
}
return 0;
}
考虑所有线条相互干扰时,取两条线与x坐标轴构成容器的最大容量
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int maxArea(vector<int> &height) {
if (height.empty()) return 0;
int maxHeight = 0, Area = 0;
for (int i = 1; i < height.size(); ++i)
if (height[i] > height[maxHeight]) maxHeight = i;
for (int i = 0; i < maxHeight;)
{
int j = i;
while (i < maxHeight && height[i] <= height[j]) ++i;
if (height[j] * (i - j) > Area) Area = height[j] * (i - j);
}
for (int i = height.size() - 1; i > maxHeight;)
{
int j = i;
while (i > maxHeight && height[i] <= height[j]) --i;
if (height[j] * (j - i) > Area) Area = height[j] * (j - i);
}
return Area;
}
};
int main()
{
int n;
Solution so;
while (cin >> n)
{
vector<int> height(n);
for (int i = 0; i < n; ++i) cin >> height[i];
cout << so.maxArea(height) << endl;
}
return 0;
}