Problem: 11. 盛最多水的容器
思路
这题长得就像一个窗口,就是求窗玻璃的面积
解题方法
滑动窗口:
从两边向中间收缩,每次都记录中间“矩形”的最大值
注意收缩技巧:left
和right
哪边短收缩哪边
复杂度
-
时间复杂度:
O ( n ) O(n) O(n) 只需遍历窗口 -
空间复杂度:
O ( 1 ) O(1) O(1) 没有新开数据结构,只有一些常量
Code
class Solution {
public int maxArea(int[] height) {
//滑动窗口
int left = 0,right = height.length - 1;
int area = 0;
//两边向中间收缩,计算矩形面积并且留下最大值
while(left < right){
int current_area = (right - left) * Math.min(height[left],height[right]);
area = Math.max(area,current_area);
if(height[left] < height[right]){
left++;
}else{
right--;
}
}
return area;
}
}