算法跟练第十弹——栈与队列

文章目录

  • part01 逆波兰表达式求值
  • part02 滑动窗口最大值
  • part03 前 K 个高频元素
  • 归纳:
    • 将字符串转转换成整数:
    • LinkedList
    • Map遍历
    • 优先级队列的比较器

跟着代码随想录刷题的第十天。

代码随想录链接:代码随想录

part01 逆波兰表达式求值

题目链接:150. 逆波兰表达式求值

代码:

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();int num;int a;int b;for(String i:tokens){if(isInt(i)){num = Integer.parseInt(i);stack.push(num);}else{b = stack.pop();a = stack.pop();int result = cal(i,a,b);stack.push(result);}}return stack.pop();}public boolean isInt(String s){//用正则表达式String b = "^-?\\d+$";return s.matches(b);}public int cal(String s,int a,int b){int result;switch(s){case "+":result = a+b;break;case "-":result = a-b;break;case "*":result = a*b;break;default:result = a/b;}return result;}
}

题解:只要遇到符号,就弹出前两个数并且进行运算,再把运算的结果存进去

代码随想录的解法:

class Solution {public int evalRPN(String[] tokens) {Deque<Integer> stack = new LinkedList();for (String s : tokens) {if ("+".equals(s)) {        // leetcode 内置jdk的问题,不能使用==判断字符串是否相等stack.push(stack.pop() + stack.pop());      // 注意 - 和/ 需要特殊处理} else if ("-".equals(s)) {stack.push(-stack.pop() + stack.pop());} else if ("*".equals(s)) {stack.push(stack.pop() * stack.pop());} else if ("/".equals(s)) {int temp1 = stack.pop();int temp2 = stack.pop();stack.push(temp2 / temp1);} else {stack.push(Integer.valueOf(s));}}return stack.pop();}
}

对比了一下,我多了判断字符串数组里面的数是不是整数的步骤

part02 滑动窗口最大值

题目链接:239. 滑动窗口最大值

代码:

class MyQueue{Deque<Integer> queue = new LinkedList<>();public void poll(int val){if(!queue.isEmpty()&&val==queue.peek()){queue.poll();}}public void add(int val){while(!queue.isEmpty()&&val>queue.getLast()){queue.removeLast();}queue.add(val);}public int peek(){return queue.peek();}
}class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length==1)return nums;MyQueue queue = new MyQueue();int len = nums.length-k+1;int[] result = new int[len];int cnt = 0;for(int i = 0;i<k;i++){queue.add(nums[i]);}result[cnt++] = queue.peek();for(int i = k;i<nums.length;i++){queue.poll(nums[i-k]);queue.add(nums[i]);result[cnt++] = queue.peek();}return result;}
}

题解:本题是自定义了一个单调队列,只在队列中保留可能成为最大值的数值。当一个数值进入到队列中时,若是前面所有值都比它小,就全部弹出。

part03 前 K 个高频元素

题目链接:347.前 K 个高频元素

代码:

class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer,Integer> map = new HashMap<>();for(int n:nums){map.put(n,map.getOrDefault(n,0)+1);}PriorityQueue<int[]> que = new PriorityQueue<>((pair1,pair2)->pair1[1]-pair2[1]);for(Map.Entry<Integer, Integer> entry : map.entrySet()){if(que.size()<k){que.add(new int[]{entry.getKey(),entry.getValue()});}if(que.size()<k){que.poll();que.add(new int[]{entry.getKey(),entry.getValue()});}}int[] ans = new int[k];for(int i= k-1;i>=0;i--){ans[i] = que.poll()[0];}return ans;}
}

题解:先用HashMap将元素和出现频率存储起来,再用小根堆将出现频率按顺序保留,最后输出。

归纳:

将字符串转转换成整数:

int num = Integer.parseInt(i);

LinkedList

  • 获取链表最后一个元素
a.getLast();
  • 移除链表最后一个元素
a.moveLast();

Map遍历

Map.Entry<Integer, Integer> entry : map.entrySet()

优先级队列的比较器

new PriorityQueue<>((pair1, pair2) -> pair1[1] - pair2[1])

这里使用了 PriorityQueue 的构造函数,并传入了一个 Lambda 表达式 作为比较器(Comparator)。

比较器的作用是定义队列中元素的优先级规则。

Lambda 表达式 (pair1, pair2) -> pair1[1] - pair2[1]
pair1 和 pair2 是两个 int[] 类型的元素(即两个整数数组)。

pair1[1] 和 pair2[1] 分别表示这两个数组的第二个元素(索引为 1 的元素)。

pair1[1] - pair2[1] 是一个比较逻辑:

  • 如果 pair1[1] < pair2[1],结果为负数,表示 pair1 的优先级高于 pair2。

  • 如果 pair1[1] == pair2[1],结果为 0,表示两者优先级相同。

  • 如果 pair1[1] > pair2[1],结果为正数,表示 pair1 的优先级低于 pair2。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32系统架构介绍

STM32系统架构 1. CM3/4系统架构2. CM3/4系统架构-----存储器组织结构2.1 寄存器地址映射&#xff08;特殊的存储器&#xff09;2.2 寄存器地址计算2.3 寄存器的封装 3. CM3/4系统架构-----时钟系统 STM32 和 ARM 以及 ARM7是什么关系? ARM 是一个做芯片标准的公司&#xff0c…

Leetcode - 149双周赛

目录 一、3438. 找到字符串中合法的相邻数字二、3439. 重新安排会议得到最多空余时间 I三、3440. 重新安排会议得到最多空余时间 II四、3441. 变成好标题的最少代价 一、3438. 找到字符串中合法的相邻数字 题目链接 本题有两个条件&#xff1a; 相邻数字互不相同两个数字的的…

2025.2.10 每日学习记录3:技术报告只差相关工作+补实验

0.近期主任务线 1.完成小论文准备 目标是3月份完成实验点1的全部实验和论文。 2.准备教资笔试 打算留个十多天左右&#xff0c;一次性备考笔试的三个科目 1.实习申请技术准备&#xff1a;微调、Agent、RAG 据央视财经&#xff0c;数据显示&#xff0c;截至2024年12月…

【苍穹外卖】修改前端代码解决修改Nginx端口后websocket连接失败的问题

解决方案——修改前端js代码 步骤一 找到文件app.d0aa4eb3.js&#xff08;…\nginx-1.20.2\html\sky\js\app.d0aa4eb3.js&#xff09;&#xff0c;将n"ws://localhost/ws/"改成下面的内容。 // 改成n"ws://localhost&#xff1a;800/ws/"仍然不行——页面…

本地基于GGUF部署的DeepSeek实现轻量级调优之二:检索增强生成(RAG)

前文&#xff0c;我们在本地windows电脑基于GGUF文件&#xff0c;部署了DeepSeek R1 1.5B模型&#xff0c;如果想在离线模式下加载本地的DeepSeek模型自行对进行训练时&#xff0c;是不能直接使用GGUF文件进行训练的&#xff0c;但是可以对模型进行微调&#xff0c;以下说的是第…

开发完的小程序如何分包

好几次了&#xff0c;终于想起来写个笔记记一下 我最开始并不会给小程序分包&#xff0c;然后我就各种搜&#xff0c;发现讲的基本上都是开发之前的小程序分包&#xff0c;可是我都开发完要发布了&#xff0c;提示我说主包太大需要分包&#xff0c;所以我就不会了。。。 好了…

Java进阶篇之多线程

引言 &#x1f680; 在前面的文章中&#xff0c;我们介绍了NIO&#xff08;Java进阶篇之NIO基础&#xff09;。你是不是曾经在面对需要处理大量任务的应用时&#xff0c;感觉单线程根本不够用&#xff1f;&#x1f613; 如果你想让你的应用运行得更快、更高效&#xff0c;多线…

Visual Studio 使用 “Ctrl + /”键设置注释和取消注释

问题&#xff1a;在默认的Visual Studio中&#xff0c;选择单行代码后&#xff0c;按下Ctrl /键会将代码注释掉&#xff0c;但再次按下Ctrl /键时&#xff0c;会进行双重注释&#xff0c;这不是我们想要的。 实现效果&#xff1a;当按下Ctrl /键会将代码注释掉&#xff0c;…

DeepSeek投喂数据(训练AI)

1、拉取nomic-embed-text 打开命令行&#xff0c;运行&#xff1a;ollama pull nomic-embed-text 这里需要先安装ollama &#xff0c;不过大家应该在本地部署模型时已经安装了 拉取成功就行了&#xff0c;后续在配置AnythingLLM时用到 2、下载 AnythingLLM 地址&#xff1a…

【原创精品】基于Springboot3+Vue3的学习计划管理系统

大家好&#xff0c;我是武哥&#xff0c;最近给大家手撸了一个基于SpringBoot3Vue3的学习计划管理系统&#xff0c;可用于毕业设计、课程设计、练手学习&#xff0c;系统全部原创&#xff0c;如有遇到网上抄袭站长的&#xff0c;欢迎联系博主~ 项目演示视频 https://www.bili…

逆势而上,门店规模拓展的智慧攻略-中小企实战运营和营销工作室博客

逆势而上&#xff0c;门店规模拓展的智慧攻略-中小企实战运营和营销工作室博客 在竞争激烈、风云变幻的商业市场中&#xff0c;多数品牌在困境中艰难求生&#xff0c;而部分佼佼者却能突破重重阻碍&#xff0c;实现门店规模的逆势扩张。这些成功案例背后&#xff0c;究竟隐藏着…

基于改进型灰狼优化算法(GWO)的无人机路径规划

内容&#xff1a; 基于改进型灰狼优化算法的无人机轨迹规划 GWO是一种群体智能优化算法&#xff0c;模仿灰狼的社会等级和狩猎行为。原始的GWO有一些局限性&#xff0c;比如容易陷入局部最优&#xff0c;收敛速度慢等&#xff0c;所以改进型的GWO可能通过不同的策略来优化这些…

网络安全与AI:数字经济发展双引擎

在2025年年初&#xff0c;一场科技攻防战引发了全球关注。国产人工智能DeepSeek的爆火&#xff0c;伴随着大规模的网络攻击事件&#xff0c;将网络安全的重要性推上了风口浪尖。 在此背景下&#xff0c;我们计划探讨网络安全与人工智能如何为数字经济发展提供强大动力。网络安…

2.11学习记录

web——CTFHub XSS学习 学习资料&#xff1a;xss&#xff08;跨站攻击&#xff09; 原理 1.黑客发送带有xss恶意脚本的链接给用户 2.用户点击了恶意链接&#xff0c;访问了目标服务器&#xff08;正常的服务器&#xff09; 3.目标服务器&#xff08;正常的服务器&#xff09…

个人毕业设计--基于HarmonyOS的旅行助手APP的设计与实现(挖坑)

在行业混了短短几年&#xff0c;却总感觉越混越迷茫&#xff0c;趁着还有心情学习&#xff0c;把当初API9 的毕业设计项目改成API13的项目。先占个坑&#xff0c;把当初毕业设计的文案搬过来 摘要&#xff1a;HarmonyOS&#xff08;鸿蒙系统&#xff09;是华为公司推出的面向全…

零成本搭建私人图床教程:CloudFlare R2 + PicGo 完整方案

零成本搭建私人图床教程&#xff1a;CloudFlare R2 PicGo 完整方案 &#x1f680; 前言 图片托管服务在现代内容创作中扮演着重要角色。无论是技术博客、文档编写&#xff0c;还是在线教程制作&#xff0c;都离不开可靠的图片存储和分发系统。本教程将详细介绍如何利用 Clou…

Word2vec Skip-Gram 模型

图例 Skip-gram 模型&#xff0c;假设句子中的每个词都决定了相邻词的选取&#xff0c;所以你可以看到Skip-gram模型的输入是 W t W_{t} Wt​&#xff0c; 预测的输出是 W t W_t Wt​ 周边的词 也是说Skip-gram的目标是&#xff1a;给定一个中心词 W t W_t Wt​, 预测其上下…

【R语言】相关系数

一、cor()函数 cor()函数是R语言中用于计算相关系数的函数&#xff0c;相关系数用于衡量两个变量之间的线性关系强度和方向。 常见的相关系数有皮尔逊相关系数&#xff08;Pearson correlation coefficient&#xff09;、斯皮尔曼秩相关系数&#xff08;Spearmans rank corre…

网络工程师 (32)TRUNK

一、定义 TRUNK&#xff0c;也称为端口汇聚、链路汇聚或多链路汇聚&#xff0c;是一种网络技术&#xff0c;其本质是将多个以太网端口绑定在一起作为一个逻辑链路来使用。通过TRUNK技术&#xff0c;用户在使用这个逻辑链路时&#xff0c;就好像是在使用一条独立的物理链路一样&…

“可通过HTTP获取远端WWW服务信息”漏洞修复

环境说明&#xff1a;①操作系统&#xff1a;windows server&#xff1b;②nginx&#xff1a;1.27.1。 1.漏洞说明 “可通过HTTP获取远端WWW服务信息”。 修复前&#xff0c;在“响应标头”能看到Server信息&#xff0c;如下图所示&#xff1a; 修复后&#xff0c;“响应标头…