[Leetcode] Container With Most Water

来源:互联网 发布:windows桌面更新多久 编辑:程序博客网 时间:2024/05/22 08:18

题目链接在此

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and n is at least 2.


也就是说,有按顺序排列的一系列线条,选取其中的两条,再加上x轴(地面),组成一个容器,这个容器的容量(其实就是长×高)要最大。要求只遍历一趟这些线条!


这位大神的做法简便又快速。

Start by evaluating the widest container, using the first and the last line. All other possible containers are less wide, so to hold more water, they need to be higher. Thus, after evaluating that widest container, skip lines at both ends that don't support a higher height. Then evaluate that new container we arrived at. Repeat until there are no more possible containers left.


就是从最外侧的两条线开始,逐渐向中间靠拢。随着向中间靠拢,容器变窄,所以只有当两边变得更高,才有机会超越当前最大容量。

class Solution {public:int maxArea(vector<int>& height) {        int water = 0;        int i = 0, j = height.size() - 1;        while (i < j) {            int h = min(height[i], height[j]);            water = max(water, (j - i) * h);            while (height[i] <= h && i < j) i++;            while (height[j] <= h && i < j) j--;        }        return water;}};



0 0
原创粉丝点击