zoukankan      html  css  js  c++  java
  • 5.16 Stacks and Queues

    1. Min Stack
      思路:
      两种解法:
      1. 两个栈,一个栈存所有的element, 另一个栈存最小的当前栈中的最小元素,
    ```java
    class MinStack {
    Stack<Integer> stackMin; //store the min element
    Stack<Integer> stack;
    //int min; //多余 不需要这个全局最小值, 用stackMin.peek() 来记录全局最小值即可
    }
    
    2. 新建一个自定义的数据类型 node 存val, next, min 三个reference
    

    难点在于对stack的 push() 和 pop() 操作的更新。
    压入栈的规则:
    假设当前数据为newNum, 先将其压入stack, 然后判断stackMin是否为空:
    如果stackMin为空,将newNum也压入stackMin
    如果不为空,则比较newNum 和stackMin 的栈顶元素中哪一个更小:
    如果newNum更小,将newNum也压入stackMin栈中,同时更新min = newNum
    如果stackMin的栈顶元素更小,则stackMin不压入元素

    弹出栈的元素从上到下依次增大,栈顶元素既为stackMin中的最小值,也同时为全局最小值,
    弹出栈的规则:
    先弹出stack中的栈顶元素,记作value, 然后比较当前stackMin的栈顶元素和value哪一个最小:
    当value == stackMin.peek(), stackMin 弹出栈顶元素
    当value > stackMin.peek(), stackMin 不弹出
    不会出现value < stackMin.peek() 的情况,因为stackMin.peek() 是两个栈的最小值

    CC189 3.3 Stack of Plates
    resizing stack??
    关键在于对将 stack 扩展之后,两个stack之间如何建立起链接? 新建一个reference, 指向stack

    3.5 Sort Stack
    Write a program to sort a stack such that the smallest items are on the top. (use only one tempory stack)
    倒水杯
    先设定有两个stack, 一个已经sorted 另一个没有sorted,如何将未sorted的stack与已经sorted的stack 合并为一个sorted stack?

    Leetcode 20 Valid Parenthesis
    左右必定配对,左括号
    for (char c : s.toCharArray()) {...}

    LeetCode 331. Verify Preorder Serialization of a Binary Tree
    必须要做相关处理 剪枝
    String[] strs = preorder.split(",");

    public class Solution { 
         public boolean isValidSerialization(String preorder) {
            if (preorder == null) {
                return false;
            }
            String[] strs = preorder.split(','); //must use .split(",") instead of .split(',');
            Stack<String> stack = new Stack<String>();
            for (int i = 0; i < strs.length; i++) {
                String curr = strs[i]; //iterate all the string
                while (curr.equals("#") && !stack.isEmpty() && stack.peek().equals("#")) {
                    stack.pop();
                    if (stack.isEmpty()) {
                        return false;
                    }
                    stack.pop();
                }
                stack.push(curr);
            }
            return stack.size() == 1 && stack.peek().equals("#");
        }
    }
    
  • 相关阅读:
    ThinkPHP第二十天(getField用法、常用管理员表结构、树形结构前小图标CSS)
    ThinkPHP第十九天(Ueditor高亮插件、扩展函数载入load、静态缓存)
    Bootstrap第一天
    ThinkPHP第十八天(Widget类的使用,连贯操作where IN用法,缓存S函数使用)
    ThinkPHP第十七天(隐藏index.php和简短路径配置)
    ThinkPHP第十六天(redirect、join、视图模型)
    ThinkPHP第十五天(setField、setInc、setDec、关联模型)
    ThinkPHP第十四天(显示TRACE界面配置,关联模型详解定义)
    ThinkPHP第十三天(CONF_PATH、APP_PATH,UEditor用法)
    ThinkPHP常量参考
  • 原文地址:https://www.cnblogs.com/kong-xy/p/9049695.html
Copyright © 2011-2022 走看看