11 盛水最多的容器

为什么双指针的做法是正确的,因为在移动之前记录下了当前的最大值,在移动时只移动两边中短的一边,如果移动后面积更大,那就替换最大值,如果移动后面积更小,对记录好的最大值也没有影响。

public class 盛水最多的容器11 {
    public static void main(String[] args) {
//        给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
//        找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
//        返回容器可以储存的最大水量。
//        说明:你不能倾斜容器。
//        示例 1:
//        输入:[1,8,6,2,5,4,8,3,7]
//        输出:49
//        解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
//        示例 2:
//        输入:height = [1,1]
//        输出:1

    }

    public static int maxArea(int[] height) {
        int maxA = 0;
        int i = 0, j = height.length-1;
        while(i < j){
            maxA = (j-i)*(height[j]<height[i]?height[j]:height[i]) > maxA ? (j-i)*(height[j]<height[i]?height[j]:height[i]) : maxA;
            if(height[i] > height[j]){
                j--;
            }else{
                i++;
            }
        }
        return maxA;
    }
}
点赞

当前页面评论已关闭。

隐藏
变装