trapping water using stack
import java.util.*;
public class TrappingWater {
public static int maxWater(int arr[]) {
int ans = 0;
Stack<Integer> s = new Stack<>();
for (int i = 0; i < arr.length; i++) {
while (!s.isEmpty() && arr[s.peek()] < arr[i]) {
int pop_height = arr[s.peek()];
s.pop();
if (s.isEmpty())
break;
int distance = i - s.peek() - 1;
int min_height = Math.min(arr[s.peek()], arr[i]) - pop_height;
ans += distance * min_height;
}
s.push(i);
}
return ans;
}
public static void main(String[] args) {
int arr[] = { 7, 0, 4, 2, 5, 0, 6, 4, 0, 5 };
System.out.println(maxWater(arr));
}
}
Comments
Post a Comment