盛最多水的容器 I

题目: 给定 n 个非负整数 a1a2...an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai)(i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2

容器示意图

输入格式:

1
由方括号包裹以逗号分隔的整型数组

输出格式:

1
整型数字

输入样例:

1
[1,8,6,2,5,4,8,3,7]

输出样例:

1
49

思路:
双重循环暴力破解

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;

int main(void) {

char s;
int res = 0;
vector<int> nums;
// 解析输入的字符串
while(cin >> s) {
if(s >= '0' && s <= '9'){
res = res * 10 + s - '0';
}
if(s == ','){
nums.push_back(res);
res = 0;
}
if(s == ']'){
nums.push_back(res);
break;
}

}
// 获取最大面积
int maxArea = 0;
for(int i = 0; i<nums.size(); i++) {
for(int j = i + 1; j<nums.size(); j++)
maxArea = max(maxArea, min(nums[i], nums[j]) * (j - i));
}
cout << maxArea;
return 0;
}