11、盛最多水的容器
- 暴力 for 循环,使用双层for循环,枚举对应长度
for(int i=0;i<heights.length-1;i++){
for(int j = i+1;j<height.length;j++){
area = (j-i) * Math.min(height(i),height(j));
max = Math.max(max,area);
}
}
return max
- 中间夹逼法,根据题目特性,我们可以根据两侧的夹板,两个夹板中相对低的那边往中间移动。
while(i < j){
area = (j-i) * Math.min(height[i],height[j]);
max = Math.max(max,area);
if(height[i]<height[j]){
i++;
}else{
j--;
}
}
return max;
总结方法:
要跳出线性思考的逻辑,跳出一维运行观念
主要优化思想,升维+ 空间换时间。注意把题目化繁为简。