DSA problem solution: 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 can trap after raining.
Example 1:
Input: height = [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6
Example 2:
Input: height = [4,2,0,3,2,5]
Output: 9
Solution:
public class Solution { public int Trap(int[] height) { int[] leftheight = new int[height.Length]; int[] rightheight = new int[height.Length]; int maxleftheight=0; int maxrightheight=0; int trappedwater =0; for(int i=0;i<height.Length;i++) { if(i>0) { if(height[i-1]>maxleftheight) { maxleftheight = height[i-1]; } } leftheight[i] = maxleftheight; } for(int i=height.Length-1;i>=0;i--) { if(i<(height.Length-1)) { if(height[i+1]>maxrightheight) { maxrightheight = height[i+1]; } } rightheight[i] = maxrightheight; } for(int i=0;i<height.Length;i++) { int minlevel = Math.Min(rightheight[i],leftheight[i]); Console.WriteLine("Index:"+i+ " Left:"+leftheight[i]+" Right:"+rightheight[i]); if(minlevel>height[i]){ trappedwater+= (minlevel-height[i]); } } return trappedwater; } }
0 comments :
Post a Comment