11. Container With Most Water

思路是首尾设置两个游标i,j。
初始情况是宽度最宽,高度是height[i]和height[j]中较矮的一个。
1.从矮的开始出发往中间靠拢,只有中间的柱子比较高时更新max
2.重复1
时间复杂度O(n)

class Solution {
    public int maxArea(int[] height) {
        if(height.length<2)
            return 0;
        int i = 0,j = height.length-1;
        int max = 0;
        while(i!=j){
            if(height[i]<=height[j]){
                max = Math.max(max,height[i]*(j-i));
                int tmp = height[i];
                i++;
                while(i!=j){
                    if(height[i]>tmp)
                        break;
                    i++;
                }
            }else{
                max = Math.max(max,height[j]*(j-i));
                int tmp = height[j];
                j--;
                while(i!=j){
                    if(height[j]>tmp)
                        break;
                    j--;
                }
            }
        }
        return max;
    }
}

你可能感兴趣的:(11. Container With Most Water)