盛最多水的容器

给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

 

 

 

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

 

示例:

输入: [1,8,6,2,5,4,8,3,7]
输出: 49

 

解答:

  

public static int maxArea(int[] height){
        /*申明最大面积*/
        int area=0;
        /*定义一个下标s,指向数组的最后一个*/
        int second=height.length-1;
        /*定义一个下标f,指向数组的第一个*/
        int first=0;
        /*当s不等于f时*/
        while (second>first){
            /*获取f下标对应的值*/
            int firstValue=height[first];
            /*获取s下标对应的值*/
            int secondValue=height[second];
            /*临时变量*/
            int tmp;
            /*由于面积由短的决定,所以由短的来计算,然后把短的向前或向后移动一个,继续计算,为什么移动短的,自己体会下*/
            if(firstValue>=secondValue){
                tmp=secondValue*(second-first);
                second=second-1;
            }else{
                tmp=firstValue*(second-first);
                first=first+1;
            }
            if(tmp>area){
                area=tmp;
            }
        }
        return area;
    }
View Code

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/container-with-most-water

posted @ 2019-11-14 22:27  有为吴  阅读(105)  评论(0编辑  收藏  举报