42. Trapping Rain Water

本文深入探讨了如何通过计算特定高度图中可捕获的雨水量来解决经典的雨水平衡问题。采用双指针策略,从左右两端逼近,动态更新最高历史水位,从而精确计算出累积的雨水总量。示例代码清晰展示了算法实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

42. Trapping Rain Water

Hard

477683FavoriteShare

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.


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!

Example:

Input: [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6

Accepted

372,679

Submissions

820,434

class Solution {
public:
    int trap(vector<int>& height){
    	int left=0;
    	int right=height.size()-1;
    	int leftmax=0;//记录目前为止左指针左边最高的高度
    	int rightmax=0;//记录目前为止右指针右边最高的高度
    	int sum=0;
    	while(left<right){
    		if(height[left]<height[right]){//如果此时左边的高度小于右边的高度,则一定可以盛水
    			if(leftmax<height[left]){//更新高度
    				leftmax=height[left];
    			}else{
    				sum+=(leftmax-height[left]);//计算盛水量
    			}
                left++;
    		}else{
    			if(rightmax<height[right]){
    				rightmax=height[right];
    			}else{
    				sum+=(rightmax-height[right]);
    			}
                right--;
    		}
    	}
    	return sum;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值