代码随想录算法训练营第十一天(LeetCode150.逆波兰表达式求值;LeetCode239.滑动窗口最大值;LeetCode347.前K个高频元素)

embedded/2024/11/27 19:21:34/

LeetCode 150. 逆波兰表达式求值

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

思路

主要是要理解逆波兰表达式的定义,在理解了逆波兰表达式的定义后,使用栈就可以直接做了。
逆波兰表达式是一种后缀表达式,所谓后缀就是指运算符写在后面。
平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。
该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。
逆波兰表达式主要有以下两个优点:
1.去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
2.适合用栈操作运算:遇到数字则入栈;遇到运算符则取出栈顶两个数字进行计算,并将结果压入栈中。

代码

java">class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack=new Stack<>();for(String s:tokens){if("+".equals(s)){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();}
}

LeetCode 239. 滑动窗口最大值

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

思路

自己设计一个单调队列,有三个函数 pop 函数、push 函数和 getMaxValue 函数,每次将一个元素 push 进入单调队列,如果单调队列现存的元素全部小于 push 进来的元素,那么单调队列现存的元素全部 pop 出去,同时,如果 push 现存的元素后,单调队列中的元素个数大于 k 的时候,那么也要 pop 元素出去,这样可以保证单调队列队头元素就是我们想要获得的最大值,getMaxValue 函数就是获取单调队列的队头元素。

代码

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

LeetCode 347. 前 k 个高频元素

题目链接:前k个高频元素题目链接

思路

首先将数组里面的元素存入一个 Map 键值对中,键是数组的元素,值是数组元素出现的频率。然后设计一个小顶堆,大小被限制为 k,将 Map 键值对存入小顶堆中,对 Map 的值进行小顶堆排序,小顶堆是先弹出频率较小的元素,所以数组存储要倒序存储。

代码

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

http://www.ppmy.cn/embedded/140980.html

相关文章

c++总复习

1) 什么是 C 中的多继承&#xff1f;它有哪些优缺点&#xff1f; 多继承&#xff1a; 在 C 中&#xff0c;多继承&#xff08;Multiple Inheritance&#xff09;是指一个类可以继承自多个基类。也就是说&#xff0c;一个子类可以有多个父类&#xff0c;这使得子类能够继承多个…

计算机视觉 1-8章 (硕士)

文章目录 零、前言1.先行课程&#xff1a;python、深度学习、数字图像处理2.查文献3.环境安装 第一章&#xff1a;概论1.计算机视觉的概念2.机器学习 第二章&#xff1a;图像处理相关基础1.图像的概念2.图像处理3.滤波器4.卷积神经网络CNN5.图像的多层表示&#xff1a;图像金字…

UE5_CommonUI简单使用

近在研究UE5的CommonUI,一开始觉得这个插件对于UI的设计开发来说似乎也没有什么更大的作用,奈何大家多少都有在用,索性我也看看吧。 以下是一些完整一些以及我看过的教程,跟着先看看: 视频: 【[英文直播]Common UI简介(官方字幕)】 https://www.bilibili.com/video/BV…

人工智能 实验8 搜索技术:A*八数码,一字棋游戏

每日例行赊赞 一、实验目的 &#xff08;1&#xff09;掌握搜索技术的相关理论&#xff0c;能根据实际情况选取合适的搜索方法&#xff1b; &#xff08;2&#xff09;进一步熟悉盲目搜索技术&#xff0c;掌握其在搜索过程中的优缺点&#xff1b; &#xff08;3&#xff09;…

LangChain——HTML文本分割 多种文本分割

Text Splitters 文本分割器 加载文档后&#xff0c;您通常会想要对其进行转换以更好地适合您的应用程序。最简单的例子是&#xff0c;您可能希望将长文档分割成更小的块&#xff0c;以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器&#xff0c;可以轻松地拆分、组…

第九章 使用Apache服务部署静态网站

1. 网站服务程序 1970 年&#xff0c;作为互联网前身的 ARPANET&#xff08;阿帕网&#xff09;已初具雏形&#xff0c;并开始向非军用部门开放&#xff0c;许多大学和商业机构开始陆续接入。虽然彼时阿帕网的规模&#xff08;只有 4 台主机联网运行&#xff09;还不如现在的…

任意文件读取漏洞(CVE-2024-7928)修复

验证CVE-2024-7928问题是否存在可以使用如下方法&#xff1a; https://域名/index/ajax/lang?lang..//..//目录名/文件名&#xff08;不带后缀&#xff09; 目录名是该项目的一个目录&#xff0c;这里目录位置为nginx设置站点目录为基准&#xff0c;网上两层目录。 文件名…

AutoDL安装docker问题

在AutoDL上租了卡&#xff0c;安装docker遇到一些问题&#xff1a; 1.执行 sudo docker run hello-world 报错 docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 解决方法 先查看docker有没有启动&#xff0c;…