leecode11——盛水问题
作者:互联网
一开始用的暴力解法 两个for循环
因为有两个指针指向 然后第一下就是想着两个指针
然鹅指针一个在头一个在尾
开始记录了最左和最右的容量,若向内移动短指针 容器有可能变大(三种情况都有)
若移动长指针,那么容量会变小,因为两个壁最小值不变,而间距变小。
class Solution {
public int maxArea(int[] height) {
//Area=(ni-nj)*hmin
//有点类似排序的
if(height.length<1) return 0;
if(height.length==1) return Math.min(height[0],height[1]);
//超过三个 Area=(ni-nj)*hmin 寻找坐标下这个最大的
int maxAr=0;
//for(int start=0;start<height.length;start++){//遍历每个下标
// int end=start+1;
// while(end<height.length){
// tem=(Math.abs(start-end))*(Math.min(height[start],height[end]));//保存容量
// if(tem>=maxAr){
// maxAr=tem;//保存最大容量
// }
// ++end;
// }
//}
int i=0;
int j=0;
int minH=0;
for(i=0,j=height.length-1 ; i < j ;){
//寻找i j最小的一个
minH=(height[i]<height[j])?height[i++]:height[j--];//寻找高较小的一个
maxAr=Math.max(minH*(Math.abs(i-j)+1),maxAr);//+1的原因是位置已经移动 不是原来的位置
}
return maxAr;
}
}
标签:minH,盛水,int,maxAr,length,height,问题,leecode11,指针 来源: https://blog.csdn.net/wish9968/article/details/120849882