zoukankan      html  css  js  c++  java
  • LeetCode 11. 盛最多水的容器(Container With Most Water)

    题目描述

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

    注意:你不能倾斜容器,n 至少是2。

    解题思路

    考虑用双指针法解题。维护两个指针f、l分别指向数组左右两端,则f和l构成的容器盛水体积计算公式为min(height[f],height[l])*(l-f)。可以看出盛水体积取决于容器边中较小的数字和容器底长度。若移动较大的数字,则容器底长度会变小,而盛水的最大高度不变,所以盛水体积不会变更大。因此需要移动两数中较小的数字,这样若中间出现特别大的数字,则有可能提高盛水体积。然后每次移动完更新此时的最大盛水体积,直到两指针相遇。

    代码

     1 class Solution {
     2 public:
     3     int maxArea(vector<int>& height) {
     4         int f=0,l=height.size()-1;
     5         int maxA=-1;
     6         while(f<l){
     7             int area=min(height[f],height[l])*(l-f);
     8             if(area>maxA)
     9                 maxA=area;
    10             if(height[f]<height[l])
    11                 f++;
    12             else l--;
    13         }
    14         return maxA;
    15     }
    16 };
  • 相关阅读:
    Mina、Netty、Twisted一起学(七):公布/订阅(Publish/Subscribe)
    MySQL高可用之——keepalived+互为主从
    JS之BOM
    Mac下利用(xcode)安装git
    计算矩阵边缘元素之和
    什么是猴子补丁(monkey patch)
    协议支撑
    BZOJ 3727 PA2014 Final Zadanie 树形DP
    Linux cat命令
    iOS8新特性
  • 原文地址:https://www.cnblogs.com/wmx24/p/9043447.html
Copyright © 2011-2022 走看看