問題描述
給定乙個只包括 '(',')','','[',']' 的字串,判斷字串是否有效。
解題思路
這道題讓我們驗證輸入的字串是否為括號字串,包括大括號,中括號和小括號。
這裡我們使用棧。
動畫演示
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 此時是在的某個子集的基礎上得到的。而對於貪心來說,我們能夠從這個待解決的問題上得到一種更緊...