原題鏈結
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 ...