一、題目
力扣原題: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)
四、總結
根據題意,容易想到可以通過左右指針進行邊界移動,動態計算盛水量即可。