LeetCode Min Stack 解題報告

2021-07-03 16:09:34 字數 648 閱讀 8934

原題鏈結

design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

實現乙個棧,與其他棧不同的地方在於getmin方法,在o(1)的複雜度下獲得棧中的最小值。

我用兩個棧,乙個棧stack放原本的元素,另乙個棧min 存放最小值。

stack的入棧情況不變。

min棧

入棧情況。

如果棧為空,當入棧的時候,直接將元素push到min

如果棧不為空,當入棧的元素<= min.top(),入棧,反之則不入棧。

出棧情況

如果出棧元素和min.top()相等,則min.pop(),,其他情況min不出棧。

因為棧的特點是filo,所以當其他比min.top()大的元素入棧是不會影響到最小值的。因此min.top()總是stack中當前的最小值。

class minstack 

void pop()

int top()

int getmin()

private:

stackstack;

stackmin;

};

USACO Hamming Codes 解題報告

資料小,暴力搜尋可以搞定。但是推薦使用dfs,每個節點 數 有取與不取兩個分支。注意 0是必須出現的。證明如下 最終得到的結果序列中,0是必須出現的,證明如下 如果存在另乙個滿足要求的結果序列s 其最小值為a1 n 0,那麼序列s s n 是滿足條件的最小解,且首元素為0 id xpli1 prog...

USACO Closed Fences 解題報告

幾何題看著就很有畏懼感。這裡用的是最 的演算法,時間複雜度應該在n 2。還沒看別人的解題報告,不過我猜nlogn的解法是有的。比如判斷乙個fence是不是valid的時候,這裡將所有的線段兩兩比較,看是否相交。但是有個叫line sweep的演算法,可以在nlogn的時間複雜度內完成。既然accep...

Wiggle Subsequence解題報告

這道題和最長子序列,divisible subset題目類似,都可以用o n2 的時間複雜度完成。可以想象,對於第i個數,dp i dp j 1,當且僅當dp j 1 dp i 而且nums j 和nums i 的差值和j所處位置的差值符號相反。所以,如下 class solution if dp ...