以下題目來自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個操作組成的操作序列符合條件的如下 入棧,出棧,入棧,出棧 ...