• Leetcode 盛最多水的容器


     

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

    /*

    思路: 双指针,第一个指针指向数组头部,第二个指针指向数组尾部
        每次计算出来目前最大承载量,限制目前承载量的是i和j中量最小的那个.
        然后把量小的i或者j向对方靠近.
    */
    int maxArea(int* height, int heightSize){
        int i=0, j=heightSize-1;
        int area = 0, tmp;
    #define max(a, b) (a)>(b)?(a):(b)
    #define min(a, b) (a)<(b)?(a):(b)
        while (i<j) {
            tmp = (j-i) * (min(height[i], height[j]));
            area = (max(tmp, area));
            if (height[i]<height[j]) ++i;
            else --j;
        }
        return area;
    }
  • 相关阅读:
    oracle数据库使用PL/sql导入excel数据
    http协议详解之响应报文 3
    http详解之post 2
    http协议详解1
    tomcat配置https协议
    linux服务端导入oracle数据库.sql脚本
    fiddler查看http压缩格式传输的报文
    SurfaceView绘制录音波形图
    android 蓝牙SPP协议通信
    好用的Android屏幕适配
  • 原文地址:https://www.cnblogs.com/micoblog/p/13337857.html
Copyright © 2020-2023  润新知