一、栈的特性与使用

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

Cgp9HWA4jJaAMKH7ADCb3Og8L1Q358.gif

二、刷题:

1.有效的括号(20)

地址:https://leetcode-cn.com/problems/valid-parentheses/

解决方案:

循环输入的字符串,如果是等于左括号,将右括号压入栈中,全部压入栈后做出栈操作,直到栈清空。注意边界值。

  1. var isValid = function (s) {
  2. if (s.length % 2 !== 0) return false
  3. let stack = []
  4. for (let i = 0; i < s.length; i++) {
  5. let c = s[i]
  6. if (c === '(') { stack.push(')') }
  7. else if (c === '[') { stack.push(']') }
  8. else if (c === '{') { stack.push('}') }
  9. else if (stack.length === 0 || stack.pop() != c) { return false }
  10. }
  11. return stack.length === 0
  12. };

2.每日温度(剑指 Offer II 038. 每日温度

地址:https://leetcode-cn.com/problems/iIQa4I/

尝试去维持一个递减栈

  1. var dailyTemperatures = function (temperatures) {
  2. const len = temperatures.length
  3. const stack = []
  4. const res = (new Array(len)).fill(0)
  5. for (let i = 0; i < len; i++){
  6. // 若栈不为0,且存在打破递减趋势的温度值
  7. while(stack.length && temperatures[i] > temperatures[stack[stack.length-1]]){
  8. // 将栈顶温度值对应的索引出栈
  9. let top = stack.pop()
  10. // 计算 当前栈顶温度值与第一个高于它的温度值 的索引差值
  11. res[top] = i-top
  12. }
  13. // 注意栈里存的不是温度值,而是索引值,这是为了后面方便计算
  14. stack.push(i)
  15. }
  16. return res
  17. };

3.最小栈(155)

地址:https://leetcode-cn.com/problems/min-stack/

  1. var MinStack = function() {
  2. this.stack = []
  3. };
  4. /**
  5. * @param {number} val
  6. * @return {void}
  7. */
  8. MinStack.prototype.push = function(val) {
  9. this.stack.push(val)
  10. };
  11. /**
  12. * @return {void}
  13. */
  14. MinStack.prototype.pop = function() {
  15. this.stack.pop()
  16. };
  17. /**
  18. * @return {number}
  19. */
  20. MinStack.prototype.top = function() {
  21. if(this.stack.length){
  22. return this.stack[this.stack.length-1]
  23. }else{
  24. return
  25. }
  26. };
  27. /**
  28. * @return {number}
  29. */
  30. MinStack.prototype.getMin = function() {
  31. let minValue = Infinity
  32. for(let i = 0 ; i < this.stack.length;i++){
  33. if(this.stack[i] < minValue) {
  34. minValue = this.stack[i]
  35. }
  36. }
  37. return minValue
  38. };
  39. /**
  40. * Your MinStack object will be instantiated and called as such:
  41. * var obj = new MinStack()
  42. * obj.push(val)
  43. * obj.pop()
  44. * var param_3 = obj.top()
  45. * var param_4 = obj.getMin()
  46. */