微軟100題(2) min函式棧

2021-07-02 16:05:16 字數 1306 閱讀 6291

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小時之中,時鐘的時針 分針和秒針完全重合在...