Trapping Rain Water 接雨水問題

2021-10-23 21:09:52 字數 711 閱讀 9078

描述:給定 n 個非負整數表示每個寬度為1的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。

解法一:單調棧呼叫

乙個棧存的數值遞減,如果當前元素小於棧頂元素,則進棧;如果大於棧頂元素,先彈出棧頂元素,然後看棧中的前乙個元素

class solution 

if (height[top] == height[stack.peek()])

res += (i - stack.peek() - 1) * (math.min(height[stack.peek()], height[i]) - height[top]);

}// 1. 如果當前元素小於棧頂元素則進棧

stack.push(i);

}return res;

}}

引申: 單調棧主要回答這樣幾種問題:

1. 比當前元素更大的下乙個元素;

2. 比當前元素更大的前乙個元素;

3. 比當前元素更小的下乙個元素;

4. 比當前元素更小的前乙個元素

拿2.舉例,比當前元素更大的前乙個元素:

step1. 單調棧中存資料的下標,如果棧中資料為空,則 res[i] = i 《當前元素下標》,並將 i 壓棧;

如果當前棧頂元素 > 當前元素,則 res[i] = 棧頂值,並將 i 壓棧;

如果當前棧頂元素 < 當前元素,則出棧,然後繼續 step1.

演算法 接雨水

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。示例 1 輸入 height 0,1,0,2,1,0,1,3,2,1,2,1 輸出 6 解釋 上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的高度圖,在這種情況下,可以接 6 個單位...

LeetCode刷題 接雨水

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的高度圖,在這種情況下,可以接 6 個單位的雨水 藍色部分表示雨水 時間複雜度o n 空間複雜度o n int trap vector ...

力扣接雨水問題

思路是這樣的,先找到陣列中的最大值,然後在以他為中心,左右分割遍歷陣列,遞迴陣列,總是找最大值,計算 兩個最大值之間的存水量 最後彙總相加即可得出結果.package test public class testcasetwo int reuslt trapleft height,maxinx tr...