zoukankan      html  css  js  c++  java
  • 盛最多水的容器

    给定 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

  • 相关阅读:
    laravel本地化
    laravel加载javascript库
    laravel安装第三方包3rd generators
    openfire的smack和asmack
    openfire+spark+smack实现即时通讯
    openfire开发
    即时通信Spark安装和配置
    ubuntu eclipse CDT 问题
    网络编程TCP总结及实践-C语言
    [Openstack]使用devstack自己主动化安装
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/11863086.html
Copyright © 2011-2022 走看看