其他分享
首页 > 其他分享> > leecode11——盛水问题

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