劍指offer 面試題21 相關

2022-08-16 11:36:09 字數 1680 閱讀 8761

題目:設計包含min函式的棧,pop(),push(),min()的時間複雜度均為o(1)

自己所寫**如下:(寫『棧』的**還是有些不熟練!)

#include using

namespace

std;

const

int max = 100

;class

stack

;stack::stack()

stack::~stack()

bool stack::empty() const

int stack::top() const

else

}void stack::push(int

n) }

else

cerr

<<"

stack is full!

"<}void

stack::pop()

else

cerr

<<"

stack is empty!

"<}int

stack::min()

}

#include "

stdafx.h

"#include

#include

"stack.h

"using

namespace

std;

intmain()

此題未考慮成熟!  需要的是輔助棧而非輔助變數!!!

修改如下:

//

思路:首先,自己之前編寫的棧正是作者所說的第二種行不通的;

//此時,若深入想下去,就可能因為需要更多的成員變數而想到再設定乙個棧!

//解決本題的關鍵:想到設定輔助棧,而且通過例子來模擬push,pop和min函式

//關鍵中的關鍵:min函式的操作如何達到o(1),或者說是輔助棧的入棧與出棧

//默寫**如下:

//利用stl中的stack,並將stackwithmin寫成類模板

#includetemplate

class

stackwithmin

;template

stackwithmin

::stackwithmin()

template

stackwithmin

::~stackwithmin()

template

bool stackwithmin::empty() const

template

t stackwithmin

::top() const

template

void stackwithmin::push(const t&n)

else

}template

void stackwithmin::pop()

else

std::cout

<<"

stack is empty!

"<}template

t stackwithmin

::min() const

template

size_t stackwithmin

::size() const

劍指offer面試題21

面試題21 包含min函式的棧 題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 預備知識 棧的定義 模板函式 思路 面對乙個複雜的問題,我們可以舉幾個具體的例子來尋找規律,對於本題目,我們可以通過舉例來分析它...

《劍指offer》陣列相關面試題

在乙個長度為n的陣列裡所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複,也不知道重複了幾次,請找出陣列中任意乙個重複的數字。例如,長度為7的陣列,那麼對應的輸出應該是重複的數字2或者3.思路 重排這個陣列,從頭到尾依次掃瞄這個陣列中的每個數字。掃到下標為i的數字m時 首先...

面試題4 相關題目

題目 有兩個排序陣列a1和a2,內存在a1後面有足夠的空間容納a2。實現乙個函式,把a2中的數字插入到a1,並且所有的數字是排序的。示例 includeusing namespace std 兩個有序陣列a1和a2,a1後面有足夠的記憶體容納a2,將a2插入到a1中,使結果有序 bool inser...