盛最多的水
1.题目
2. 暴力
遍历所有可能
class Solution {
public:
int maxArea(vector<int>& A) {
int res = -1;
int m = A.size();
for (int i= 0; i< m; i++) {
for (int j = i+1; j < m; j++) {
int tmp = (j - i) * min(A[i], A[j]);
res = max(res, tmp);
}
}
return res;
}
};
2. 优化
面积= 间距 * 最小的高度
定义两个指针分别向内移动,由于,每次都是移动一步,相对两个指针而言,无论移动哪个指针,间距始终再减小并且减小的值始终为1;
为了保障面积最大,只有找出高度大的哪个指针向内部移动,这样可以保证面积最大;
class Solution {
public:
int maxArea(vector<int>& A) {
int res = -1;
int m = A.size();
int i = 0, j = m - 1;
while (i < j) {
int tmp = (j - i) * min(A[i], A[j]);
if (A[i] < A[j]) {
i++;
} else {
j--;
}
res = max(res, tmp);
}
return res;
}
};