設計這樣的棧,常數時間內操作min,push,pop
又看了下程式設計之美關於此題的解法,總覺得太過繁瑣,實際上只需要用乙個陣列來儲存歷屆最小值即可,還可以省略掉乙個下標,不需要如此麻煩。
/*
*/ #include using namespace std;
class stack
void push(int item)
position++;
data[position] = item;
if(position == 0) else
} void pop()
position--;
} int min()
return minvalues[position];
} bool empty()
private:
static const int size = 20;
int data[size];
int position;
int minvalues[size];
};void main()
; const int size = sizeof array / sizeof *array;
for(int i = 0; i < size; i ++)
cout << endl;
while(!stack.empty())
}
如何以常數時間找到棧中的最小值?
leetcode155.最小棧 思路 利用輔助棧 1.在push的時候主棧直接push,對於輔助棧如果棧為空,直接push,如果棧不為空,判斷push的值是否比棧頂值小,如果小於等於,則push,反之不push。2.pop的時候主棧判斷不為空後直接pop,輔助棧判斷不為空後,如果pop的值等於棧頂的...
棧在O 1 時間內求min值
實現乙個棧stack,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 思路 1 在stack的資料結構中加兩個個字段,如 typedef struct stack pop,push的時候都去棧頂元素,所以是o 1 min的時候取stack的min欄位,所以也是o...
Min棧的實現
問題 實現乙個棧,要求實現push 入棧 pop 出棧 min 返回最小值 的時間複雜度為o 1 思路 用兩個棧來實現,乙個存正常棧,另乙個存最小棧,要用到棧的基本操作,中的 stack.h 是我寫的棧的基本操作的 初始化 void minstackinit minstack pms 入棧 void...