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

LeetCode 11. 盛最多水的容器

时间:2020-01-26 23:52:24      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:math   solution   端点   int   用两个   更新   移动   min   时间   

题意

给出\(n\)个垂直线段,相邻两线段之间的距离是\(1\),选出一个区间,使得区间两端线段中较短的那根长度乘区间长度最大。

思路

  • 想法1:枚举没对线段作为区间端点的情况。时间复杂度\(O(n^2)\),太暴力。

  • 想法2:双指针法。

    思想依据:因为两段之间形成的区域总会受到其中较短的那条长度的限制,此外,两线段距离越远,得到的面积越大。

    具体做法:在线段长度构成的数组中使用两个指针,分别指向开始和末尾,每一步都计算出指针所指向的线段形成的区域的最大值,用一个变量来保存更新最大值。指针向较长的那端移动。

代码

class Solution {
public:
    int maxArea(vector<int>& height) {

        int res = 0, l = 0, r = height.size() - 1;
        while(l < r)
        {
            res = max(res, min(height[l], height[r]) * (r - l));
            if(height[l] < height[r])
                ++l;
            else
                --r;
        }
        return res;
    }
};

总结

女少口阝可!

LeetCode 11. 盛最多水的容器

标签:math   solution   端点   int   用两个   更新   移动   min   时间   

原文地址:https://www.cnblogs.com/songjy11611/p/12235205.html

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