2.設計包含min 函式的棧。
定義棧的資料結構,要求新增乙個min 函式,能夠得到棧的最小元素。
要求函式min、push 以及pop 的時間複雜度都是o(1)。
要能在o(1)時間拿到min值,則棧中每個位置都應該有關於最小值的資訊,否則無法直接獲得最小值
所以,有兩種思路,一是棧中每個值為乙個結點,節點包括當前value和min值,另一種則借助輔助棧,使得輔助棧中只儲存對應的min資訊
思路一:
struct minstackelement
;struct minstack
;minstack minstackinit(int max_size)
void freeminstack(minstack stack)
void minstackpush(minstack stack,int d)
int minstackpop(minstack stack)
int minstackmin(minstack stack)
思路二:借助輔助棧
template class stackwithmin
virtual ~stackwithmin(void) {}
t& top(void);
const t& top(void) const;
void push(const t& value);
void pop(void);
const t& min(void) const;
bool empty() const;
size_t size() const;
private:
std::stackm_data; // 資料棧,存放棧的所有元素
std::stackm_min; // 輔助棧,存放棧的最小元素
};template void stackwithmin::push(const t& value)
template void stackwithmin::pop()
template const t& stackwithmin::min() const
template t& stackwithmin::top()
template const t& stackwithmin::top() const
template bool stackwithmin::empty() const
template size_t stackwithmin::size() const
100題 設計包含min 函式的棧
定義棧的資料結構,要求新增乙個min 函式,能夠得到棧的最小元素。要求函式min push 以及pop 的時間複雜度都是 o 1 include include include using namespace std templateclass mystack 析構函式 virtual mystac...
100題 02 設計包含min函式的棧
題目 定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 以下是 pragma once template typename t class stack template typename t class stack node t...
微軟100題(100)智力題2
1.12個球乙個天平,現知道只有乙個和其它的重量不同,問怎樣稱才能用三次就找到那個球。13個呢?注意此題並未說明那個球的重量是輕是重,所以需要仔細考慮 5分鐘 1小時 2.在9個點上畫10條直線,要求每條直線上至少有三個點?3分鐘 20分鐘 3.在一天的24小時之中,時鐘的時針 分針和秒針完全重合在...