1. 程式人生 > 遊戲攻略 >《極限競速地平線5》AE86B級調校分享

《極限競速地平線5》AE86B級調校分享

定義棧的資料結構,請在該型別中實現一個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min、push 及 pop 的時間複雜度都是 O(1)。

  示例:

    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.min(); --> 返回 -3.
    minStack.pop();
    minStack.top(); --> 返回 0.
    minStack.min(); --> 返回 -2.

========================================================================

這個題目比較麻煩的就是返回最小值的時候要求時間複雜度是O(1),我一開始的思路是被固定了,只想著查詢時間複雜度是O(1),那不就是hash,但是hash怎麼用?

撓頭苦想了半個小時,實在是不知道怎麼做了,看了眼評論,說加一個變數記錄當前的最小值,一語驚醒夢中人,自己就陷在一個錯誤的思路里了,唉

上程式碼:

struct stackNode {
    int value;
    int min;
};

class MinStack {
private
: vector<stackNode> *stack = new vector<stackNode>(); public: /** initialize your data structure here. */ MinStack() { } void push(int x) { stackNode s; s.value = x; if (stack->empty()) s.min = x; else { int mV = stack->back().min;
if (mV > x) s.min = x; else s.min = mV; } stack->push_back(s); } void pop() { stack->pop_back(); } int top() { stackNode s; s = stack->back(); return s.value; } int min() { stackNode s; s = stack->back(); return s.min; } };

這個題目想通這一點是一點都不難,可惜可惜,感覺自己不應該做不出來,唉。。。