幾道和 堆疊 佇列 有關的面試演算法題

2022-05-17 16:15:14 字數 2044 閱讀 7849

問題描述

給定乙個只包括 '(',')','','[',']' 的字串,判斷字串是否有效。

解題思路

這道題讓我們驗證輸入的字串是否為括號字串,包括大括號,中括號和小括號。

這裡我們使用

動畫演示

20. valid parentheses

**實現

class solution  else if (issym(stack.peek(), achar))  else 

}return stack.size() == 0;

}private boolean issym(char c1, char c2) ');}}

問題描述

用兩個棧來實現乙個佇列,完成佇列的 push 和 pop 操作。

解題思路

in 棧用來處理入棧(push)操作,out 棧用來處理出棧(pop)操作。乙個元素進入 in 棧之後,出棧的順序被反轉。當元素要出棧時,需要先進入 out 棧,此時元素出棧順序再一次被反轉,因此出棧順序就和最開始入棧順序是相同的,先進入的元素先退出,這就是佇列的順序。

動畫 1

**實現

stackin = new stack();

stackout = new stack();

public void push(int node) 

public int pop() throws exception 

問題描述

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列 1,2,3,4,5 是某棧的壓入順序,序列 4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

解題思路

借用乙個輔助的棧,遍歷壓棧順序,先講第乙個放入棧中,這裡是 1,然後判斷棧頂元素是不是出棧順序的第乙個元素,這裡是 4,很顯然 1≠4 ,所以需要繼續壓棧,直到相等以後開始出棧。

出棧乙個元素,則將出棧順序向後移動一位,直到不相等,這樣迴圈等壓棧順序遍歷完成,如果輔助棧還不為空,說明彈出序列不是該棧的彈出順序。

**實現

public boolean ispoporder(int pushsequence, int popsequence) 

}return stack.isempty();

}

問題描述

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的 min 函式。

解題思路

使用兩個 stack,乙個作為資料棧,另乙個作為輔助棧。其中資料棧用於儲存所有資料,而輔助棧用於儲存最小值。

舉個

幾道面試到的演算法題

1.如何判斷乙個鍊錶是否為迴圈鍊錶 乙個錯誤的想法 將乙個指標p指向頭節點,另乙個指標q往後遍歷,如果直到q為null時任然沒有遇到q p的情況,那麼不是迴圈鍊錶,如果在其中遇到q p的情況,則此為迴圈鍊錶。這種想法的錯誤之處在於沒有考慮到a b c d b這種迴圈不包括第乙個節點的情況。乙個比較笨...

有點難度,幾道和 滑動視窗 有關的演算法面試題

滑動問題包含乙個滑動視窗,它是乙個執行在乙個大陣列上的子列表,該陣列是乙個底層元素集合。假設有陣列 a b c d e f g h 乙個大小為 3 的滑動視窗在其上滑動,則有 a b c b c d c d e d e f e f g f g h 一般情況下就是使用這個視窗在陣列的合法區間內進行滑動...

面試演算法題 動態規劃和貪心演算法的區別

首先動態規劃和貪心都是用來解決問題的,我們用q n 來表示所要解決的總規模為n的問題的集合,我們的最終結果就是要選出乙個子集a n 對於動態規劃來說,要解決q n 首先要解決a 1 a 2 a n 1 a n 此時是在的某個子集的基礎上得到的。而對於貪心來說,我們能夠從這個待解決的問題上得到一種更緊...