秋招算法刷题10(栈和队列)

0509

232.用栈实现队列

class MyQueue {
        Deque<Integer> inStack;
        Deque<Integer> outStack;

        public MyQueue() {
            inStack = new ArrayDeque<Integer>();
            outStack = new ArrayDeque<Integer>();
        }

        public void push(int x) {
            inStack.push(x);
        }

        public int pop() {
            if (outStack.isEmpty()) {
                in2Out();
            }
            return outStack.pop();
        }

        public int peek() {
            if (outStack.isEmpty()) {
                in2Out();
            }
            return outStack.peek();
        }

        public boolean empty() {
            return inStack.isEmpty() && outStack.isEmpty();
        }

        private void in2Out() {
            while (!inStack.isEmpty()) {
                outStack.push(inStack.pop());
            }
        }
    }

225. 用队列实现栈


20.有效的括号

class Solution {
    private static final Map<Character,Character> map=new HashMap<Character,Character>(){{
        put('{','}');
        put('(',')');
        put('[',']');
        put('?','?');
    }};
    public boolean isValid(String s) {
        if(s.length()>0&&!map.containsKey(s.charAt(0))) return false;
        LinkedList<Character> stack=new LinkedList<Character>() {{add('?');}};
        for(Character c:s.toCharArray()){
            if(map.containsKey(c)) stack.addLast(c);
            else if(map.get(stack.removeLast()) !=c) return false;

        }
        return stack.size()==1;
    }
}

0510

1047 删除字符串中的所有相邻重复项

在这里插入图片描述

public String removeDuplicates(String s) {
        char[] s1=s.toCharArray();
        int top=-1;
        for(int i=0;i<s.length();i++){
            if(top==-1||s1[top]!=s1[i]){
                s1[++top]=s1[i];
            }else{
                top--;
            }
        }
        return String.valueOf(s1,0,top+1);
    }

150.逆波兰表达式求值

在这里插入图片描述

public int evalRPN(String[] tokens) {
        Stack<Integer> numStack=new Stack<>();
        Integer op1,op2;
        for(String s:tokens){
            switch(s){
                case "+":
                    op2=numStack.pop();
                    op1=numStack.pop();
                    numStack.push(op1+op2);
                    break;
                case "-":
                    op2=numStack.pop();
                    op1=numStack.pop();
                    numStack.push(op1-op2);
                    break;
                case "*":
                    op2=numStack.pop();
                    op1=numStack.pop();
                    numStack.push(op1*op2);
                    break;
                case "/":
                    op2=numStack.pop();
                    op1=numStack.pop();
                    numStack.push(op1/op2);
                    break;
                default:
                    numStack.push(Integer.valueOf(s));
                    break;
            }
        }
        return numStack.pop();
    }

347.前k个高频元素

在这里插入图片描述

public int[] topKFrequent(int[] nums, int k) {
        // 优先级队列,为了避免复杂 api 操作,pq 存储数组
        // lambda 表达式设置优先级队列从大到小存储 o1 - o2 为从小到大,o2 - o1 反之
        PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);
        int[] res = new int[k]; // 答案数组为 k 个元素
        Map<Integer, Integer> map = new HashMap<>(); // 记录元素出现次数
        for (int num : nums) map.put(num, map.getOrDefault(num, 0) + 1);
        for (var x : map.entrySet()) { // entrySet 获取 k-v Set 集合
            // 将 kv 转化成数组
            int[] tmp = new int[2];
            tmp[0] = x.getKey();
            tmp[1] = x.getValue();
            pq.offer(tmp);
            // 下面的代码是根据小根堆实现的,我只保留优先队列的最后的k个,只要超出了k我就将最小的弹出,剩余的k个就是答案
            if(pq.size() > k) {
                pq.poll();
            }
        }
        for (int i = 0; i < k; i++) {
            res[i] = pq.poll()[0]; // 获取优先队列里的元素
        }
        return res;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623773.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java数据类型:基本类型

Java是一种强类型语言&#xff0c;定义变量时&#xff0c;必须指定数据类型。 // 变量必须指定数据类型 private String username;初学者不免有个疑问&#xff1a;在实际编写代码的过程中&#xff0c;该如何选择数据类型呢&#xff1f; 回答这个问题之前&#xff0c;先来解决…

CSS 块状元素

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

DevOps 温故知新

【引】伴随着微服务架构以及云技术的广泛使用&#xff0c;DevOps相应地引起了人们的关注&#xff0c;尤其在互联网企业展开了大量的探索和实践。去年赋闲在家的时候&#xff0c; 有幸精读了三本书&#xff0c;分别是《持续架构实践——敏捷和DevOps时代下的软件架构》&#xff…

vue 运行项目node-scss报错

vue项目node版本与自己电脑node版本不一样运行node导致报错 node-sass模块对node版本有兼容性&#xff0c;版本不适配&#xff0c;就容易报错 解决方案&#xff1a; 在项目目录下打开cmd&#xff1a; 输入命令&#xff1a; npm rebuild node-sass 然后再更新一下&#xff1a;…

重生奇迹mu剑士职业

1、剑士转职条件&#xff1a; 首先等级需要达到150级&#xff0c;在冰风谷寻找NPC圣导士《赛维娜》开启第一次转职任务&#xff0c;转职步骤分为两步&#xff0c;每完成一个步骤同时奖励10点属性点。 2、第一阶段&#xff1a; 与NPC圣导师赛维娜对话接取任务 2.领取任务后击…

SpringBoot报空指针错:java.lang.NullPointerException

虽然报空指针错误的原因可能有很多种&#xff0c;但是我还是写上我的报错原因&#xff0c;以此与各位共勉~ 在这里提前说一句&#xff0c;AI虽然强大&#xff0c;但是还是要谨慎使用啊(血的教训)~ 这里先截图我错误的地方&#xff1a; 前端能成功传进来值&#xff0c;后台控制…

网络安全快速入门(九)MySQL进阶操作

上一章我们了解了对表及库的基本增删查改操作&#xff0c;本章我们针对增删查改内容进行与一些拓展&#xff0c; 9.1字段修饰及数据类型 我们之前在创建表时用到的格式为&#xff1a; create table 表名 ( 字段名1 字段数据类型&#xff08;数据类型长度&#xff09;, 字段名2 …

SpringAMQP 发布订阅-DirectExchange

DirectExchange: 路由模式模型 代码实现 直接通过注解方式绑定交换机和队列&#xff0c;这里边加了key也就是BingdingKey绑定key&#xff0c;可以看作交换机的路由规则&#xff0c;交换机收到消息后读取消息中指定的Routingkey发送到存有相应BingdingKey的队列中。 RabbitLis…

界面组件DevExpress Reporting中文教程 - 标记(可访问)PDF导出增强

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 可访问性支持在DevExpress这里仍然是一个高优先…

XR806开发板MQTT电源智能控制器

非常感谢这次极术社区,借助对Xr806开发板的试用&#xff0c;接触到了鸿蒙harmonyos&#xff0c;使用一定过程历时较长&#xff0c;也是一点点摸索&#xff0c;得到了很好学习机会。 社区里很多文章&#xff0c;感谢各位大佬的文章指点&#xff0c;本次试用主要是参考了两位大佬…

数据结构(二) 线性表

2024年5月13日一稿 线性表的定义与基本操作 数据类型相同(各个元素占用空间相同) 是有限序列 基操

武汉星起航:亚马逊店铺经营秘籍,揭秘提升点击率的关键策略

在竞争激烈的亚马逊电商平台上&#xff0c;提升点击率成为了每个卖家都渴望实现的目标。点击率不仅直接关系到商品的曝光度和销售量&#xff0c;更是衡量店铺经营效果的重要指标。那么&#xff0c;如何才能在众多商品中脱颖而出&#xff0c;吸引潜在买家的目光呢&#xff1f;武…

浏览器不兼容 replaceAll 方法问题解决

问题 在一些较旧版本的浏览器中可能会出现 replaceAll 方法不兼容&#xff0c;提示replaceAll 方法 undefined 的问题。浏览器版本兼容情况如下图所示&#xff1a; 解决 可以通过 replace 正则表达式 的方法来代替 replaceAll 方法&#xff1a; let str "我是一段文本…

【激活函数--下】非线性函数与ReLU函数

文章目录 一、非线性函数在神经网络中的重要性二、ReLU函数介绍及其实现2.1 ReLU函数概述2.2 ReLU函数的Python实现及可视化 一、非线性函数在神经网络中的重要性 在神经网络中&#xff0c;激活函数的选择对于网络的性能和能力至关重要。阶跃函数和Sigmoid函数除了是激活函数的…

想跨境出海?云手机提供了一种可能性

全球化时代&#xff0c;越来越多的中国电商开始将目光投向了海外市场。这并不是偶然&#xff0c;而是他们在长期的市场运营中&#xff0c;看到了出海的必要性和潜在的机会。 中国的电商市场无疑是全球最大也最发达的之一。然而&#xff0c;随着市场的不断发展和竞争的日益加剧…

300订单,成交大于一切

最近一直在忙于做老客户的需求&#xff0c;新客户挖掘方面有点大大的落后了&#xff0c;新客户的成交率接近0。 今天来了一个新客户&#xff0c;部署一套系统&#xff0c;我的正常报价都是300/次&#xff0c;至于为什么定这个价格后面再说&#xff0c;经过沟通客户没有服务器&…

【数据库】数据库指令

一。数据库打开 1.命令行 2.进入mysql mysql -uroot -p密码 3.退出 exit&#xff1b; 二。针对数据库的操作 1.创建数据库&#xff08;有分号&#xff09; create database student; 2.使用数据库 use student 3.删除数据库&#xff08;有分号&#xff09; drop database…

KNIME 报告扩展

文档对应的 KNIME AP 版本为 5.2 介绍 本指南介绍了 KNIME 报告扩展&#xff0c;并展示了如何创建简单和高级报告。 本指南更新于 2024/05/13&#xff0c;最新版请访问指北君网站 https://havef.fun/knime-cn/knime-doc/ KNIME 报告扩展允许您根据工作流程的结果创建静态报告。…

机器人系统ros2内部接口介绍

内部 ROS 接口是公共 C API &#xff0c;供创建客户端库或添加新的底层中间件的开发人员使用&#xff0c;但不适合典型 ROS 用户使用。 ROS客户端库提供大多数 ROS 用户熟悉的面向用户的API&#xff0c;并且可能采用多种编程语言。 内部API架构概述 内部接口主要有两个&#x…

岩土工程监测仪器之一:振弦采集仪的工作原理解析

岩土工程监测仪器之一&#xff1a;振弦采集仪的工作原理解析 河北稳控科技振弦采集仪是岩土工程监测中常用的一种仪器&#xff0c;用于测量地面、结构物或其他物体的振动情况。它通过感应振弦的振动来获取相关的数据&#xff0c;进而分析和评估土壤、地基或结构物的稳定性和安…