要点
-
不是说两个height值最大容器就最大,还得考虑下标的距离,及综合考虑面积
-
要多少个移动体
-
怎么算面积
-
怎么取最大值
-
怎么移动
因为必须比较最小值--所以必须要有两个下标
- 面积
(b-a)*Math.min(height[a],height[b])
- 最大值
let max=0;
max=Math.max(max,s);//这里的max为之前的最大值,就免去了使用数组一个一个插入再取最大值的麻烦
暴力方法
双重for循环
var maxArea = function(height) {
let q=0;
for(let i=0;i<height.length;i++){
for(let n=i+1;n<height.length;n++){
q=Math.max(q,Math.min(height[i],height[n])*(n-i))
}
}
return q;}
优点:容易想到,缺点:运行时间太长--无法完成
双指针方法
利用两边去往中间递进--类似快速排序
控制,较长边不动较短边往里面运--【要有比较过程】
var maxArea = function(height) {
let left=0;let right=height.length-1;
let max=0;
while(left<right){
max=Math.max(max,(right-left)*Math.min(height[left],height[right]));
if(height[left]<height[right]){
left++;
}else{
right--;
}
}
return max;}
总结:但碰到需要两个下标移动的题目,可以考虑双指针
配套while(left<right)