当前位置: 首页 > news >正文

5.16 Stacks and Queues

  1. Min Stack
    思路:
    两种解法:
    1. 两个栈,一个栈存所有的element, 另一个栈存最小的当前栈中的最小元素,
    ```java
    class MinStack {
    Stack stackMin; //store the min element
    Stack 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("#");
    }
}

```

转载于:https://www.cnblogs.com/kong-xy/p/9049695.html

相关文章:

  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java 架构师眼中的 HTTP 协议
  • Java多线程干货系列—(四)volatile关键字
  • first
  • Linux Swap扩容
  • 函数的默认参数:可有可无
  • os模块注意事项
  • 腾讯云全面开放,联手千万开发者共建超级大脑
  • 【51Nod】1920 空间统计学 状压DP
  • vue-router原理剖析
  • js继承方式讲解
  • BZOJ5286:[HNOI/AHOI2018]转盘——题解
  • maven 下载地址
  • JS中的深拷贝与浅拷贝了解一下
  • Postfix邮件系统
  • [iOS]Core Data浅析一 -- 启用Core Data
  • angular组件开发
  • CAP理论的例子讲解
  • es6--symbol
  • iOS 系统授权开发
  • JavaScript HTML DOM
  • JS基础之数据类型、对象、原型、原型链、继承
  • MYSQL 的 IF 函数
  • mysql_config not found
  • npx命令介绍
  • Promise面试题,控制异步流程
  • Sass 快速入门教程
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 产品三维模型在线预览
  • 后端_ThinkPHP5
  • 前端学习笔记之观察者模式
  • 数组大概知多少
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​力扣解法汇总946-验证栈序列
  • #Linux(权限管理)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (ZT)薛涌:谈贫说富
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (小白学Java)Java简介和基本配置
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)德国人的记事本
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 分布式技术比较
  • .net 受管制代码
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net中调用windows performance记录性能信息