11.一个数组,每个整数表示一堵墙,求最大容器面积

2018-03-14  本文已影响0人  Ching_Lee

class Solution {
    public int maxArea(int[] height) {
        //表示从第0堵墙和最后一堵开始计算
        int i=0,j=height.length-1;
        int maxArea=getArea(height,i,j);
        while(i<j){
            //如果i的高度小,就往后看有比arr[i]大的再计算
            if(i<j&&height[i]<=height[j]){
                while(i+1<j&&height[i]>=height[i+1])
                    i++;
                int area=getArea(height,++i,j);
                if(area>maxArea)
                    maxArea=area;
                    
            }
            
            //如果j的高度小,j就往前移,找比他大的高度
            if(i<j&&height[i]>height[j]){
                while(i<j-1&&height[j]>height[j-1])
                    j--;
                int area=getArea(height,i,--j);
                if(area>maxArea)
                    maxArea=area;
                
            }
                
        }
        
        return  maxArea;
            
        
        
    }
    
   
    public int getArea(int[] arr,int i,int j){
        if(arr[i]<arr[j])
            return arr[i]*(j-i);
        else
            return arr[j]*(j-i);
        
            
    }
}
上一篇 下一篇

猜你喜欢

热点阅读