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

[LeetCode] 11. Container With Most Water 装最多水的容器

时间:2018-03-03 11:03:47      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:lan   nta   倾斜   div   most   return   ref   gpo   ant   

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.

42. Trapping Rain Water 类似,两条垂直的线和X轴组成一个容器,灌水多少不仅与两个柱子的高度有关,也与两个柱子的距离有关,公式:S(i,j) = min(ai, aj) * (j-i),容器不能倾斜,求容纳最多水的两个线组合。

用暴力搜索Brute Force, Time: O(n2)会超时。

使用双指针two pointers。 定义left,right两个指针,两指针相遇循环结束。何时移动左右指针呢,保留较高的柱子,移动较矮的柱子。

Time complexity: O(n),  Space complexity: O(1)

Java:

class Solution {
    public int maxArea(int[] height) {
        int l = 0;
        int r = height.length - 1;
        int ans = 0;
        while (l < r) {
            int h = Math.min(height[l], height[r]);
            ans = Math.max(ans, h * (r - l));
            if (height[l] < height[r])
                ++l;
            else
                --r;
        }
        return ans;
    }
}

Python:

class Solution:
    def maxArea(self, height):
        max_area, i, j = 0, 0, len(height) - 1
        while i < j:
            max_area = max(max_area, min(height[i], height[j]) * (j - i))
            if height[i] < height[j]:
                i += 1
            else:
                j -= 1
        return max_area  

 C++:

class Solution {
public:
    int maxArea(const vector<int>& height) {
        int ans = 0;
        int l = 0;
        int r = height.size() - 1;
        while (l < r) {
            int h = min(height[l], height[r]);
            ans = max(ans, h * (r - l));
            if (height[l] < height[r]) 
                ++l;
            else
                --r;
        }
        return ans;
    }
};  

类似题目:

[LeetCode] 42. Trapping Rain Water 收集雨水

 

[LeetCode] 11. Container With Most Water 装最多水的容器

标签:lan   nta   倾斜   div   most   return   ref   gpo   ant   

原文地址:https://www.cnblogs.com/lightwindy/p/8495693.html

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