AlgoDaily Solution
1var assert = require('assert');
2
3function trappingRainWater(heights) {
4 let totalArea = 0;
5 let maxFromLeft = 0;
6 let maxAreaFromLeft = 0;
7
8 for (let height of heights) {
9 totalArea += height;
10 maxFromLeft = Math.max(maxFromLeft, height);
11 maxAreaFromLeft += maxFromLeft;
12 }
13
14 let maxFromRight = 0;
15 let maxAreaFromRight = 0;
16
17 for (let i = heights.length - 1; i >= 0; i--) {
18 maxFromRight = Math.max(maxFromRight, heights[i]);
19 maxAreaFromRight += maxFromRight;
20 }
21
22 const boundingArea = heights.length * maxFromLeft;
23 const leftGap = boundingArea - maxAreaFromLeft;
24 const rightGap = boundingArea - maxAreaFromRight;
25 return boundingArea - leftGap - rightGap - totalArea;
26}
27
28try {
29 assert.equal(
30 trappingRainWater([0, 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1, 0, 0]),
31 6
32 );
33
34 console.log(
35 'PASSED: `trappingRainWater([0,0,1,0,2,1,0,1,3,2,1,2,1,0,0])` should return `6`'
36 );
37} catch (err) {
38 console.log(err);
39}
40
41try {
42 assert.equal(
43 trappingRainWater([0, 0, 1, 0, 2, 4, 4, 4, 2, 3, 1, 0, 2, 4, 3, 1, 0, 1]),
44 14
45 );
46
47 console.log(
48 'PASSED: `trappingRainWater([0,0,1,0,2,4,4,4,2,3,1,0,2,4,3,1,0,1])` should return `14`'
49 );
50} catch (err) {
51 console.log(err);
52}
53
54try {
55 assert.equal(trappingRainWater([0, 0, 1, 2, 4, 4, 4, 3, 1, 0, 0, 0]), 0);
56
57 console.log(
58 'PASSED: `trappingRainWater([0,0,1,2,4,4,4,3,1,0,0,0])` should return `0`'
59 );
60} catch (err) {
61 console.log(err);
62}
Community Solutions
Community solutions are only available for premium users.
Access all course materials today
The rest of this tutorial's contents are only available for premium members. Please explore your options at the link below.
xxxxxxxxxx
42
var assert = require('assert');
function trappingRainWater(heights) {
// Your code here
}
try {
assert.equal(
trappingRainWater([0, 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1, 0, 0]),
6
);
console.log(
'PASSED: `trappingRainWater([0,0,1,0,2,1,0,1,3,2,1,2,1,0,0])` should return `6`'
);
} catch (err) {
console.log(err);
}
try {
assert.equal(
trappingRainWater([0, 0, 1, 0, 2, 4, 4, 4, 2, 3, 1, 0, 2, 4, 3, 1, 0, 1]),
14
);
console.log(
'PASSED: `trappingRainWater([0,0,1,0,2,4,4,4,2,3,1,0,2,4,3,1,0,1])` should return `14`'
OUTPUT
Results will appear here.