不一樣又不一樣的 木板接水

2021-10-07 04:15:08 字數 2329 閱讀 3871

空地上豎立著n個從左到右排列的木板,它們可以把水擋住,但溢位最邊上木板的水將會流到空地上。

已知木板間距都是單位1,現給定每個木板的高度,請求出總共能接住的水量?

說明一點,這裡只考慮間距(寬度)和高度,不考慮第三個維度,因此水量是平方單位。

木板高度分別是2,1,3,那麼我們可以接住2*2=4平方單位的水,如下圖所示。注意,中間那個木板被水淹沒了。

木板高度分別是2,4,3,那麼可以接住2*1+3*1=5平方單位的水,如下圖所示。

輸入:

第一行乙個正整數t,表示t個測試樣例;

對於每個測試樣例,

輸入正整數n(n<=1e5),表示n塊木板;

接下來輸入n個正整數,表示木板高度h(h<1e4)。

輸出:

輸出t行,每行乙個正整數,表示每個樣例能接住的最大平方單位的水量。
看到這個題目,我的第一反應就是前天的接雨水問題,所以我想到了單調棧(悲劇的開始),後來琢磨細節,第乙個板子和做後乙個板子無論多麼短,都要存入棧。從頭開始遍歷尋找比棧頂高的柱子入棧,直至最後。但由於最後一根板子必須在棧裡面且從後往前遍歷第一根比最後一根板子大的板子也要入棧。(其實思路到這裡已經出來了,但我被要使用棧給困住了,汗,沒反映過來)所以,我寫了以下的**:

int main()

stacks;

s.push(0);

int len = arr.size();

for (int i = 1; i1 && arr[i] >= arr[s.top()])//倘若棧頂元素大,將棧頂元素出棧

//比棧頂元素小,直接放入

s.push(i);

} int ret = 0;

while (s.size() != 1)

cout << ret << endl;

} return 0;

}

看似沒有問題的**,其實隱藏著乙個bug:41 82 59 43 8 87 92 84 36 62看這組資料經過遍歷後,我們需要棧中存放的下標代表的元素有 41 82  87 92 84 62但是實際中為41 82   92  84  62,少了87;如果我們繼續想通過棧儲存元素進行控制,唉反正我是想了好久,沒做出來。我們剛才提過「從頭開始遍歷尋找比棧頂高的板子入棧,直至最後。但由於最後一根板子必須在棧裡面且從後往前遍歷第一根比最後一根板子大的柱子也要入棧」。 品味一下紅體字,我們已經理解了題意,第一根板子和最後一根板子是沒法辦法忽略的。我們以乙個板子為目標尋找第乙個比它長的板子,找到之後,我們在一第二個板子為目標找比它長的板子。。。。。。這部分想法是正確的。但是我們要到**結束呢?最後的話,肯定不行。

看例子:41 82 59 43 8 87 92 84 62 36;如果按照剛才的結論92和36之間不會有板子,所以說這種辦法不可取。

那倒哪呢?最長的板子。

我們可以從最長的板子的地方分為兩部分,我們知道第一根板子和最後一根板子是沒法辦法忽略的。我們以乙個板子為目標尋找第乙個比它長的板子,找到之後,我們在一第二個板子為目標找比它長的板子這種思路是正確的。倘若我們將後半部分也當做前半部分來處理,就可以解決我們剛才遇到的問題。

先找到最長的板子,前半部分從前往後遍歷到最長的板子的地方,後半部分從後往前遍歷到最長板子的地方,我們以乙個板子為目標尋找第乙個比它長的板子,找到之後,計算存水量,我們在一第二個板子為目標找比它長的板子。。。依次往復,知道遍歷結束。

int main()

}int ret=0;

int startindex=0;

int start=arr[0];

for(int i=1;i<=maxindex;++i)

}start=arr[arr.size()-1];

startindex=arr.size()-1;

for(int i=startindex-1;i>=maxindex;--i)

}cout<

}return 0;

}

我們不一樣

前輩們因自身實際的種種因素的影響而產生的認知,並不一定適用於我們自身。你可能從來不會去想乙個問題 你的觀點,來自 其實,它們絕大部分來自網路,它們或多或少地蠶食了你的判斷力。未來的路要怎麼走,沒有對與錯。有的,只是每乙個選擇所需要承擔的責任。我不想面臨,後之視今亦猶今之視昔的悲哀。我希望,未來回首,...

我們不一樣

這麼多年的兄弟 有誰比我更了解你 太多太多不容易 磨平了歲月和脾氣 時間轉眼就過去 這身後不散的筵席 只因為我們還在 心留在原地 張開手 需要多大的勇氣 這片天 你我一起撐起 更努力 只為了我們想要的明天 好好的 這份情好好珍惜 我們不一樣 每個人都有不同的境遇 我們在這裡 在這裡等你 我們不一樣 ...

不一樣的簡潔

less is more是設計領域對現代主義的解讀,主張功能決定形式 forms follow function 廢除一切不必要的裝飾以及重複的資訊,它的基礎就是理性主義。如果它被解讀成 要簡單,清晰,明確 應該說是不夠完全的,因為只看到了表面的 less 卻忽視了實質的 more 少即是多 les...