一、题目
力扣原题:https://leetcode-cn.com/problems/container-with-most-water/submissions/
二、暴力
class Solution {
public int maxArea(int[] height) {
if (null == height || 0 == height.length) {
return 0;
}
int max = 0;
for (int i = 0; i < height.length; i++) {
for (int j = i + 1; j < height.length; j++) {
int sum = (j - i) * Math.min(height[i], height[j]);
max = Math.max(max, sum);
}
}
return max;
}
}
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
三、双指针
class Solution {
public int maxArea(int[] height) {
if (null == height || 0 == height.length) {
return 0;
}
// 双指针
int i = 0;
int j = height.length - 1;
// 记录最大值
int max = 0;
while (i < j) {
int left = height[i];
int right = height[j];
int sum = (j - i) * Math.min(left, right);
// 判断短板边界,移动指针
if (left <= right) {
i++;
} else {
j--;
}
max = Math.max(max, sum);
}
return max;
}
}
- 时间复杂度:O(n)
- 空间复杂度:O(1)
四、总结
根据题意,容易想到可以通过左右指针进行边界移动,动态计算盛水量即可。