forked from javadev/LeetCode-in-Kotlin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.kt
35 lines (33 loc) · 1.19 KB
/
Solution.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package g0001_0100.s0042_trapping_rain_water
// #Hard #Top_100_Liked_Questions #Top_Interview_Questions #Array #Dynamic_Programming #Two_Pointers
// #Stack #Monotonic_Stack #Dynamic_Programming_I_Day_9 #Udemy_Two_Pointers
// #Top_Interview_150_Array/String #Big_O_Time_O(n)_Space_O(1)
// #2023_07_05_Time_189_ms_(99.37%)_Space_39.4_MB_(81.90%)
class Solution {
fun trap(height: IntArray): Int {
val size = height.size
var maxLeft = 0
var maxRight = 0
var totalWater = 0
var leftPtr = 0
var rightPtr = size - 1
while (leftPtr < rightPtr) {
if (height[leftPtr] <= height[rightPtr]) {
if (maxLeft > height[leftPtr]) {
totalWater = totalWater + maxLeft - height[leftPtr]
} else {
maxLeft = height[leftPtr]
}
++leftPtr
} else {
if (maxRight > height[rightPtr]) {
totalWater = totalWater + maxRight - height[rightPtr]
} else {
maxRight = height[rightPtr]
}
--rightPtr
}
}
return totalWater
}
}