leetcode之Container With Most Water 和Trapping Rain Water

Container With Most Water

Given n non-negative integers a1, a2,
..., an, where each represents a point at coordinate (i, ai). n vertical
lines are drawn such that the two endpoints of line i is at (i, ai)
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.

分析参考这里,作者讲解的很详细

class Solution {
public:
    int maxArea(vector<int> &height) {
    	int left = 0,right = height.size()-1,area = 0;
    	while(left < right)
    	{
    		area = max(area,min(height[left],height[right])*(right-left));//当前位置的面积
    		if(height[left] < height[right])
    		{
    			int k = left;
    			while(k < right && height[k] <= height[left])++k;//找下一个位置
    			left = k;
    		}
    		else
    		{
    			int k = right;
    			while(k > left && height[k] <= height[right])--k;//找下一个位置
    			right = k;
    		}
    	}
    	return area;
    }
};

Trapping Rain Water

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

For example,

Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

思路见这里,作者讲解的很详细

class Solution {
public:
    int trap(int A[], int n)
    {
    	vector<int> leftMostHeight(n,0),rightMostHeight(n,0);
    	int mostHeiht = 0,i,area = 0;
    	for(i = 0;i < n;++i)
    	{
    		leftMostHeight[i] = mostHeiht;//左边的最大高度
    		mostHeiht = max(mostHeiht,A[i]);
    	}
    	mostHeiht = 0;
    	for(i = n-1;i >= 0;--i)
    	{
    		rightMostHeight[i] = mostHeiht;//右边的最大高度
    		mostHeiht = max(mostHeiht,A[i]);
    	}
    	for(i = 0;i < n;++i)
    	{
    		int a = min(leftMostHeight[i],rightMostHeight[i]) - A[i];//当前高度的蓄水量
    		if(a > 0)area += a;
    	}
    	return area;
    }
};

另外还有两个相似的题目,都是和直方图相关的,具体看这里

时间: 2024-12-15 12:11:54

leetcode之Container With Most Water 和Trapping Rain Water的相关文章

11 Container With Most Water 42.Trapping Rain Water

11 和 42 本质上都是木桶原理: 11 如何才能存最多的水? 假设 a[left] < a[right] ,    total = a[left] *(right-left) ,  那么 right -1, right-2 位置 都比 total 小, 此时就没必要move right 了, 因为所有的right -x 都比 right 小. 此时只需要move left 指针, 继续找最大value. code 很简单: public int maxArea(int[] height) {

[LeetCode][JavaScript]Trapping Rain Water

Trapping Rain Water Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map

[leetcode]Trapping Rain Water @ Python

原题地址:https://oj.leetcode.com/problems/trapping-rain-water/ 题意: Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,

[LeetCode] [Trapping Rain Water 2012-03-10]

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map is represented by a

LeetCode: Trapping Rain Water 解题报告

https://oj.leetcode.com/problems/trapping-rain-water/ Trapping Rain WaterGiven n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,

[LeetCode] Trapping Rain Water II 收集雨水之二

Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevation map, compute the volume of water it is able to trap after raining. Note: Both m and n are less than 110. The height of each unit cell is greater th

Trapping Rain Water leetcode java

题目: Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map is represented

LeetCode: Trapping Rain Water [041]

[题目] Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map is represented

Leetcode 407. Trapping Rain Water II

Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevation map, compute the volume of water it is able to trap after raining. Note:Both m and n are less than 110. The height of each unit cell is greater tha