算法原理:
解法:利用单调性,使用双指针来解决问题
1.定义两个指针:left(指向最左边),right(指向最右边)
2.比较 left 和 right 谁比较小,谁小谁移动,left 指针向右移动,right 指针向左移动
3.计算容器大小,定义一个最大值,每算一次就更新一下最大值
4.重复步骤2 移动指针,直到两个指针相遇即可
代码编写:
java
class Solution {
public int maxArea(int[] height) {
int left = 0, right = height.length - 1, ret = 0;
while(left < right){
int v = Math.min(height[left], height[right]) * (right - left);
ret = Math.max(ret, v);
if(height[left] < height[right]){
left++;
}else{
right--;
}
}
return ret;
}
}
- 时间复杂度:O(n)
- 空间复杂度:O(1)