作為前端,接觸演算法的機會可能比較少,但是我們腦子可不能鏽了~
一道題目:輸入兩個整數序列,第乙個序列表示棧的壓入順序,判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。
例如:1,2,3,4,5是某個棧的壓入順序,序列4,5,3,2,1是該棧對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。
這裡,我用js來實現這道題,其中用陣列來模擬棧的操作。主要思路就是:
在判斷第乙個彈出的數字時,如果剛好是入棧的棧頂元素,那麼直接彈出。繼續從第1步開始判斷下乙個彈出的數字。
如果不是,則將入棧序列中不為彈出數字的數字壓入到輔助棧中直到找到這個彈出元素(若沒找到,則直接可以退出,說明彈出序列不可能)。
如果彈出序列存在的話,那麼接下來的彈出元素只有兩個可能:①出現在入棧的棧頂;②存在於輔助棧中。然後迴圈判斷這兩種狀況直到彈出棧變為空即可。
如果以上兩種情況都沒匹配到,那麼該彈出序列就不可能了。
**如下,有詳細的注釋:
/**
* 這裡使用js實現,用陣列來模擬棧的操作
* @param pushorder
* @param poporder
*/function
ispoppossible
(pushorder, poporder)
/** 3. 保證兩個輸入的序列長度是相等的 */
if(pushorder.length === poporder.length)
/** 若所有元素都彈出了還沒找到和第乙個彈出元素相等的元素,則直接返回false */
if(pushorder_copy.length ===0)
/** 說明找到了,則將匹配到的這個元素彈出 */
pushorder_copy.
pop(
)/** 4. 遍歷剩下的彈出棧元素(這裡入棧序列可能不為空,輔助棧可能不為空,彈出棧可能不為空) */
while
(poporder_copy.length >0)
else
else}}
}/** 最終入棧和出棧都為空,說明都匹配到了,則是可能的彈出序列 */
if(poporder_copy.length ===
0&& pushorder_copy.length ===0)
}}return ispossible
}/** *****測試用例***** */
/** 1.兩個都為空 */
console.
log(
ispoppossible([
],))
//true,
/** 2.其中乙個不存在 */
console.
log(
ispoppossible
(null,[
]))//false
/** 3.元素個數不匹配 */
console.
log(
ispoppossible([
1,2,
3,4]
,[1,
2,3]
))//false
/** 4.元素不匹配 */
console.
log(
ispoppossible([
1,2,
3,4]
,[1,
2,3,
5]))
//false,
/** 5.比較常規的測試 */
console.
log(
ispoppossible([
1,2,
3,4,
5],[
4,5,
3,2,
1]))
//true
/** 5.不匹配 */
console.
log(
ispoppossible([
1,2,
3,4,
5],[
4,5,
3,1,
2]))
//false
/** 6.入棧的序列為空,都在輔助棧中 */
console.
log(
ispoppossible([
1,2,
3,4,
5],[
5,4,
3,2,
1]))
//true,
/** 7. 輸入棧和輔助棧來回交替 */
console.
log(
ispoppossible([
1,3,
2,0]
,[1,
2,0,
3]))
//true
判斷棧的壓入,彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 如下...
棧的壓入彈出序列
題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列4,5,3,2,1是該棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。解答 可以用乙個輔助的棧來儲存入...
棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,判斷兩個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1 2 3 4 5是某棧的壓棧序列,序列4 5 3 2 1是該壓棧序列對應的乙個彈出序列,但4 3 5 1 2就不可能是該壓棧序列的彈出序列。bool ispoporder cons...