码迷,mamicode.com
首页 > 其他好文 > 详细

#leetcode刷题之路11-盛最多水的容器

时间:2019-02-28 14:44:22      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:cto   技术   nbsp   mamicode   mic   数组   ++   需要   整数   

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

 

暴力法太没意思了;

这其实就是个求面积的问题,我们看最可能发生的情况:也就是两个数离得越远就越有可能围成一个最大的面积,所以我们需要两个指针分别从两头向中间移动,计算面积后,两个指针中相对小的线段继续向中间移动以寻求舍弃宽度增加高度

#include <iostream>
#include <vector>
using  namespace std;

int maxArea(vector<int>& height) {
    int len=height.size();
    int area=0;
    int begin=0,end=len-1;
    while(begin<end)
    {
        int flag=height[begin]<height[end]?begin:end;//看begin和end哪个位置的数大
       area=area>(end-begin)*height[flag]?area:(end-begin)*height[flag];
        flag==begin?begin++:end--;
    }
    return area;
}

int main() {
    vector<int> height={1,8,6,2,5,4,8,3,7};
    std::cout <<maxArea(height)<< std::endl;
    return 0;
}

 

#leetcode刷题之路11-盛最多水的容器

标签:cto   技术   nbsp   mamicode   mic   数组   ++   需要   整数   

原文地址:https://www.cnblogs.com/biat/p/10450090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!