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.



思路:

对于每一个柱子,在于左右两边的柱子,容纳的面积是min(max_left,max_right) - hight.

1.从左向右遍历,对于每个柱子,找出左边最大值;

2.从右向左遍历,对于每个柱子,找出右边最大值;

3,.再扫描一遍,统计每个柱子的累计和。

class Solution{
public:
	int trap(int A[],int n)
	{
		int *max_left = new int[n];
		int *max_right= new int[n];

		//在一个循环里面,算出来每一个柱子左,右边的最大值。
		for(int i =1;i<n;i++)
		{
			max_left[i]=max(max_left[i-1],A[i-1]);
			max_right[n-1-i]=max(max_right[n-i],A[n-i]);
		}

		int sum = 0;
		for (int i=0;i<n;i++)
		{
			int height=min(max_left[i],max_right[i]);
			if (height>A[i])
			{
				sum += height - A[i];
			}
		}
		
		delete []max_left;
		delete []max_right;
		return sum;
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值