出入棧應用

2021-09-11 21:09:28 字數 1990 閱讀 4960

以下題目來自leetcode。

今天在leetcode學習了資料結構棧,雖然一直知道棧,但是從來沒有實踐過,簡單了解其原理後,看到第一道題目(本文題目二)就懵逼了...然後我就跳過了它,看到題目一,我用不是棧遞減的方法實現了一下成功了。。接著開始學習怎麼用棧遞減方法實現,仔細研究了一下,發現真的蠻有意思的。 後來我成功地自己解決了題目二和題目三(鼓勵一下,加油!土撥)。

根據每日氣溫列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入0來代替。

例如,給定乙個列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的輸出應該是[1, 1, 4, 2, 1, 1, 0, 0]

思路:1、當前元素 < 棧頂元素 ,當前元素入棧

2、當前元素 > 棧頂元素, 彈出棧頂元素,當前元素入棧

演示圖:

var dailytemperatures = function(temperatures) ,x=>0);

let stack = ;

for(let i=0; iwhile(stack.length>0 && temperatures[stack[stack.length-1]]let j = stack.pop();

res[j] = i-j;

}stack.push(i);

}return res;

};複製**

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

有效字串需滿足:

左括號必須用相同型別的右括號閉合。

左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

例如:

輸入: "([)]"

輸出: false

複製**

思路:

1、當首先出現『』、『]』、『)』時,取出棧頂部的乙個元素,判斷能否合成「{}」或「」或'()'.

3、如果棧中不存在「else

if(arr.length<2)

let match = ')

return

true

},'[': (r) =>

return

true

},'(': (r) =>

return

true}}

for(var i =0;iif(arr[i] === 'else

}else}}

if(stack.length>0)

return res

};複製**

根據逆波蘭表示法,求表示式的值。

有效的運算子包括+,-,*,/。每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。

說明:

例如:

輸入: ["4", "13", "5", "/", "+"]

輸出: 6

解釋: (4 + (13 / 5)) = 6複製**

思路:

1、遇到陣列推入棧中,

2、遇到運算子,從棧中取出兩個陣列,加入運算。

var evalrpn = function(tokens) ,

"-":(a,b) =>,

"*":(a,b) =>,

"/":(a,b) =>

}tokens.foreach(function(i)else

})return stack[0]

};複製**

總結一下:(元素)推入棧,取出比較,然後迴圈直至結束。

棧溢位入門

今天有個同學問我乙個問題 但是這個問題很好分析 我就打算那個來給他 乙個溢位的概念 這裡有個程式 include define password 1234567 int verify password char password void main else 看著源 很容易能看出來這個題的答案是12...

出入棧順序解析

在筆試堆疊知識點中通常會考一道典型的出入棧題型,格式為 已知按照0,1,2.9的順序入棧,則下面哪個不能為出棧順序?下面來進行分析。入棧順序 0,1,2,3,4,5,6,7,8,9 出棧情況分析 假如數字5出棧,則代表數字0,1,2,3,4肯定已經入棧,因為5只有入棧了才能出棧。此時0,1,2,3,...

卡特蘭數例題 出入棧

題目描述 給定乙個初始為空的棧,和n個操作組成的操作序列,每個操作只可能是出棧或者入棧。要求在操作序列的執行過程中不會出現非法的操作,即不會在空棧時執行出棧操作,同時保證當操作序列完成後,棧恰好為乙個空棧。求符合條件的操作序列種類。例如,4個操作組成的操作序列符合條件的如下 入棧,出棧,入棧,出棧 ...