int trap(vector<int>& height) {
int water = 0;
int n = height.size();
for (int i = 0; i < n; i++) {
int leftMax = 0, rightMax = 0;
for (int j = 0; j <= i; j++) leftMax = max(leftMax, height[j]);
for (int j = i; j < n; j++) rightMax = max(rightMax, height[j]);
water += min(leftMax, rightMax) - height[i];
}
return water;
}
public int trap(int[] height) {
int water = 0;
int n = height.length;
for (int i = 0; i < n; i++) {
int leftMax = 0, rightMax = 0;
for (int j = 0; j <= i; j++) leftMax = Math.max(leftMax, height[j]);
for (int j = i; j < n; j++) rightMax = Math.max(rightMax, height[j]);
water += Math.min(leftMax, rightMax) - height[i];
}
return water;
}
def trap(height):
water = 0
n = len(height)
for i in range(n):
left_max = right_max = 0
for j in range(i + 1): left_max = max(left_max, height[j])
for j in range(i, n): right_max = max(right_max, height[j])
water += min(left_max, right_max) - height[i]
return water
function trap(height: number[]): number {
let water = 0;
for (let i = 0; i < height.length; i++) {
let leftMax = 0, rightMax = 0;
for (let j = 0; j <= i; j++) leftMax = Math.max(leftMax, height[j]);
for (let j = i; j < height.length; j++) rightMax = Math.max(rightMax, height[j]);
water += Math.min(leftMax, rightMax) - height[i];
}
return water;
}
int trap(vector<int>& height) {
int n = height.size();
if (n == 0) return 0;
vector<int> left(n), right(n);
left[0] = height[0];
for (int i = 1; i < n; i++) left[i] = max(left[i - 1], height[i]);
right[n - 1] = height[n - 1];
for (int i = n - 2; i >= 0; i--) right[i] = max(right[i + 1], height[i]);
int water = 0;
for (int i = 0; i < n; i++) water += min(left[i], right[i]) - height[i];
return water;
}
public int trap(int[] height) {
int n = height.length;
if (n == 0) return 0;
int[] left = new int[n], right = new int[n];
left[0] = height[0];
for (int i = 1; i < n; i++) left[i] = Math.max(left[i - 1], height[i]);
right[n - 1] = height[n - 1];
for (int i = n - 2; i >= 0; i--) right[i] = Math.max(right[i + 1], height[i]);
int water = 0;
for (int i = 0; i < n; i++) water += Math.min(left[i], right[i]) - height[i];
return water;
}
def trap(height):
n = len(height)
if n == 0: return 0
left = [0] * n; right = [0] * n
left[0] = height[0]
for i in range(1, n): left[i] = max(left[i - 1], height[i])
right[n - 1] = height[n - 1]
for i in range(n - 2, -1, -1): right[i] = max(right[i + 1], height[i])
water = 0
for i in range(n): water += min(left[i], right[i]) - height[i]
return water
function trap(height: number[]): number {
const n = height.length;
if (n === 0) return 0;
const left = new Array<number>(n), right = new Array<number>(n);
left[0] = height[0];
for (let i = 1; i < n; i++) left[i] = Math.max(left[i - 1], height[i]);
right[n - 1] = height[n - 1];
for (let i = n - 2; i >= 0; i--) right[i] = Math.max(right[i + 1], height[i]);
let water = 0;
for (let i = 0; i < n; i++) water += Math.min(left[i], right[i]) - height[i];
return water;
}
int trap(vector<int>& height) {
vector<int> stack;
int water = 0;
for (int i = 0; i < (int)height.size(); i++) {
while (!stack.empty() && height[i] > height[stack.back()]) {
int bottom = stack.back(); stack.pop_back();
if (stack.empty()) break;
int left = stack.back();
int width = i - left - 1;
int bounded = min(height[left], height[i]) - height[bottom];
water += width * bounded;
}
stack.push_back(i);
}
return water;
}
public int trap(int[] height) {
Deque<Integer> stack = new ArrayDeque<>();
int water = 0;
for (int i = 0; i < height.length; i++) {
while (!stack.isEmpty() && height[i] > height[stack.peek()]) {
int bottom = stack.pop();
if (stack.isEmpty()) break;
int left = stack.peek();
int width = i - left - 1;
int bounded = Math.min(height[left], height[i]) - height[bottom];
water += width * bounded;
}
stack.push(i);
}
return water;
}
def trap(height):
stack = []
water = 0
for i in range(len(height)):
while stack and height[i] > height[stack[-1]]:
bottom = stack.pop()
if not stack: break
left = stack[-1]
width = i - left - 1
bounded = min(height[left], height[i]) - height[bottom]
water += width * bounded
stack.append(i)
return water
function trap(height: number[]): number {
const stack: number[] = [];
let water = 0;
for (let i = 0; i < height.length; i++) {
while (stack.length > 0 && height[i] > height[stack[stack.length - 1]]) {
const bottom = stack.pop()!;
if (stack.length === 0) break;
const left = stack[stack.length - 1];
const width = i - left - 1;
const bounded = Math.min(height[left], height[i]) - height[bottom];
water += width * bounded;
}
stack.push(i);
}
return water;
}
int trap(vector<int>& height) {
int l = 0, r = (int)height.size() - 1;
int leftMax = 0, rightMax = 0, water = 0;
while (l < r) {
if (height[l] < height[r]) {
leftMax = max(leftMax, height[l]);
water += leftMax - height[l];
l++;
} else {
rightMax = max(rightMax, height[r]);
water += rightMax - height[r];
r--;
}
}
return water;
}
public int trap(int[] height) {
int l = 0, r = height.length - 1;
int leftMax = 0, rightMax = 0, water = 0;
while (l < r) {
if (height[l] < height[r]) {
leftMax = Math.max(leftMax, height[l]);
water += leftMax - height[l];
l++;
} else {
rightMax = Math.max(rightMax, height[r]);
water += rightMax - height[r];
r--;
}
}
return water;
}
def trap(height):
l, r = 0, len(height) - 1
left_max = right_max = water = 0
while l < r:
if height[l] < height[r]:
left_max = max(left_max, height[l])
water += left_max - height[l]
l += 1
else:
right_max = max(right_max, height[r])
water += right_max - height[r]
r -= 1
return water
function trap(height: number[]): number {
let l = 0, r = height.length - 1;
let leftMax = 0, rightMax = 0, water = 0;
while (l < r) {
if (height[l] < height[r]) {
leftMax = Math.max(leftMax, height[l]);
water += leftMax - height[l];
l++;
} else {
rightMax = Math.max(rightMax, height[r]);
water += rightMax - height[r];
r--;
}
}
return water;
}