一、栈的特性与使用
栈是一种特殊的线性表。栈与线性表的不同,体现在增和删的操作。
简单栈的特点可以用一句话来概括,先进后出(LIFO)顺序。

二、刷题:
1.有效的括号(20)
地址:https://leetcode-cn.com/problems/valid-parentheses/
解决方案:
循环输入的字符串,如果是等于左括号,将右括号压入栈中,全部压入栈后做出栈操作,直到栈清空。注意边界值。
var isValid = function (s) {if (s.length % 2 !== 0) return falselet stack = []for (let i = 0; i < s.length; i++) {let c = s[i]if (c === '(') { stack.push(')') }else if (c === '[') { stack.push(']') }else if (c === '{') { stack.push('}') }else if (stack.length === 0 || stack.pop() != c) { return false }}return stack.length === 0};
2.每日温度(剑指 Offer II 038. 每日温度)
地址:https://leetcode-cn.com/problems/iIQa4I/
尝试去维持一个递减栈
var dailyTemperatures = function (temperatures) {const len = temperatures.lengthconst stack = []const res = (new Array(len)).fill(0)for (let i = 0; i < len; i++){// 若栈不为0,且存在打破递减趋势的温度值while(stack.length && temperatures[i] > temperatures[stack[stack.length-1]]){// 将栈顶温度值对应的索引出栈let top = stack.pop()// 计算 当前栈顶温度值与第一个高于它的温度值 的索引差值res[top] = i-top}// 注意栈里存的不是温度值,而是索引值,这是为了后面方便计算stack.push(i)}return res};
3.最小栈(155)
地址:https://leetcode-cn.com/problems/min-stack/
var MinStack = function() {this.stack = []};/*** @param {number} val* @return {void}*/MinStack.prototype.push = function(val) {this.stack.push(val)};/*** @return {void}*/MinStack.prototype.pop = function() {this.stack.pop()};/*** @return {number}*/MinStack.prototype.top = function() {if(this.stack.length){return this.stack[this.stack.length-1]}else{return}};/*** @return {number}*/MinStack.prototype.getMin = function() {let minValue = Infinityfor(let i = 0 ; i < this.stack.length;i++){if(this.stack[i] < minValue) {minValue = this.stack[i]}}return minValue};/*** Your MinStack object will be instantiated and called as such:* var obj = new MinStack()* obj.push(val)* obj.pop()* var param_3 = obj.top()* var param_4 = obj.getMin()*/
