代码随想录训练营第十二天

第一题:

原题链接:150. 逆波兰表达式求值 - 力扣(LeetCode)

思路:

定义一个栈 stack<int> st;

当我们遇到+ - * / 的时候就需要将栈中的最后两个元素取出来,然后进行对应的操作并将结果也放入栈中,如果是数字的话将字符转换为数字放入栈中。

最后返回栈顶元素即可。

代码如下:

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;for(int i = 0; i < tokens.size(); i++){if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/"){int b = st.top();st.pop();int a = st.top();st.pop();if(tokens[i] == "+") st.push(a + b);if(tokens[i] == "-") st.push(a - b);if(tokens[i] == "*") st.push(a * b);if(tokens[i] == "/") st.push(a / b);}else{st.push(stoi(tokens[i]));}}int res = st.top();return res;}
};

第二题:

原题链接:239. 滑动窗口最大值 - 力扣(LeetCode)

思路:

先判断数组内容是否为0或者k是否为0,如果其中一个为0的话都返回空。

滑动窗口就是要维持一个窗口,让其中的元素保持k个。

我们定义一个双端队列deque<int> que;

然后我们定义两根指针来维持窗口的大小,j指向第一个元素的位置,i指向1-k的位置。当i大于0的时候,当在que中的第一个元素等于i指向元素的前一位时,证明该元素要弹出了,窗口移动让该元素弹出队列。当que中的元素不为空的时候,如果que的尾元素小于要新添加进来的元素时,我们将这些元素都弹出,这样能保持que的递减。然后将nums[j]添加到que的尾部。若窗口已经形成,将窗口的最大值添加到结果列表中。

deque 内 仅包含窗口内的元素 ⇒ 每轮窗口滑动移除了元素 nums[i−1] ,需将 deque内的对应元素一起删除。
deque 内的元素 非严格递减 ⇒ 每轮窗口滑动添加了元素 nums[j+1] ,需将 deque内所有 <nums[j+1]的元素删除。

代码如下:

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {if(nums.size() == 0 || k == 0) return {};vector<int> res;deque<int> dq;for(int j = 0, i = 1 - k; j < nums.size(); j++, i++){if(i > 0 && dq[0] == nums[i - 1]) dq.pop_front();while(!dq.empty() && dq.back() < nums[j]) dq.pop_back();dq.push_back(nums[j]);if(i >= 0) res.push_back(dq.front());}return res;}
};

第三题:

原题链接:347. 前 K 个高频元素 - 力扣(LeetCode)

思路:

使用小顶堆来判断前k个高频元素。

首先定义小顶堆:

struct cmp{bool operator()(const string& s1, const string& s2) const{// 和vector排序写法相反// a < b : [vec] 升序    [pri] 大顶堆return (s1.size() < s2.size()) || (s1.size() == s2.size() && s1 > s2);}
};

首先看看如何定义:

根据上面的代码我们知道如果要定义小顶堆的话return是a > b;

我们的定义如下:

class mycomparsion{public:bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs){return lhs.second > rhs.second;}};

有了这个就很好操作了,先定义一个unorderd_map用来存放每个元素出现的个数。然后遍历map存放到小顶堆中,其中只需要维持小顶堆的个数为k个就行,多的话就从堆顶pop掉。

最后反向将小顶堆中的元素放入结果数组中,返回即可。

代码如下:

class Solution {
public:class mycomparsion{public:bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs){return lhs.second > rhs.second;}};vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int, int> map;for(int i = 0; i < nums.size(); i++){map[nums[i]]++;}priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparsion> pri_que;for(unordered_map<int, int>::iterator it = map.begin(); it != map.end(); it++){pri_que.push(*it);if(pri_que.size() > k){pri_que.pop();}}vector<int> result(k);for (int i = k - 1; i >= 0; i--) {result[i] = pri_que.top().first;pri_que.pop();}return result;}
};

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

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

相关文章

⭐Unity 控制任意UI的渐隐渐显

使用脚本之前先给要控制的UI加上CanvasGroup组件 解释: 这个脚本使用协程来逐渐改变CanvasGroup的alpha值&#xff0c;从而实现渐隐和渐显的效果。 Mathf.Lerp函数用于在指定的时间内平滑地从当前透明度过渡到目标透明度。 通过调用FadeIn和FadeOut方法&#xff0c;你可以在任…

eNSP学习——配置DHCP中继

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置DHCP服务器 4、配置DHCP中继 5、配置PC获取地址方式为DHCP 主要命令 //配置指定DHCP服务器的方法 //方法一&#xff1a;在面向PC的接口下直接配置DHCP服…

CP AUTOSAR标准之LargeDataCOM(AUTOSAR_CP_SWS_LargeDataCOM)(更新中……)

1 简介和功能概述 该规范描述了AUTOSAR基础软件模块LdCom的功能、API和配置。   在AUTOSAR分层架构中,AUTOSAR LdCom模块位于RTE/SwCluC_LdComProxy和PDU路由之间,参见[1,EXP LayeredSoftwareArchitecture]。   AUTOSAR LdCom模块提供了一种替代的交互层机制。通过专注于…

Ubuntu 使用Vscode的一些技巧 ROS

Ubuntu VSCode的一些设置&#xff08;ROS&#xff09; 导入工作空间 推荐只导入工作空间下的src目录 如果将整个工作空间导入VSCode&#xff0c;那么这个src就变成了次级目录&#xff0c;容易在写程序的时候把本应该添加到具体工程src目录里的代码文件给误添加到这个catkin_w…

MySQL(5)

聚合函数 GROUP BY 的使用 需求&#xff1a;查询各个部门的平均工资&#xff0c;最高工资SELECT department_id,AVG(salary),SUM(salary)FROM employeesGROUP BY department_id;需求&#xff1a;查询各个job_id的平均工资SELECT job_id,AVG(salary)FROM employeesGROUP BY jo…

HTTP/3 协议学习

前一篇&#xff1a; HTTP/2 协议学习-CSDN博客 HTTP/3 协议介绍 HTTP/3 是互联网上用于传输超文本的协议 HTTP 的第三个主要版本。它是 HTTP/2 的后继者&#xff0c;旨在进一步提高网络性能和安全性。HTTP/3 与前两个版本的主要区别在于它使用了一个完全不同的底层传输协议—…

stringstream的使用

std::stringstream 是C标准库中的一个类&#xff0c;用于在内存中操作字符串流。它提供了一种方便的方式来格式化和解析字符串数据&#xff0c;类似于文件流&#xff08;如 std::ifstream 和 std::ofstream&#xff09;但针对字符串。std::stringstream 属于 <sstream> 头…

基于协同过滤算法的电影推荐

基于协同过滤算法的电影推荐 电影推荐系统使用了基于**协同过滤&#xff08;Collaborative Filtering&#xff09;的算法来生成推荐。具体来说&#xff0c;使用了基于用户的协同过滤&#xff08;User-Based Collaborative Filtering&#xff09;**算法&#xff0c;步骤如下&am…

Selenium等待方式详解:原理、用法与应用场景

在自动化测试中&#xff0c;等待是一个非常重要的概念。正确地使用等待可以提高测试用例的可靠性和稳定性。本文将详细介绍Selenium中的三种等待方式&#xff1a;线程阻塞等待、隐式等待和显式等待&#xff0c;分析它们的原理、用法和应用场景。 1. 线程阻塞等待 线程阻塞等待…

XLM-RoBERTa 是一种多语言版本的 RoBERTa 模型

XLM-RoBERTa 是一种多语言版本的 RoBERTa 模型&#xff0c;由 Facebook AI 开发。它是为了处理多种语言的自然语言理解任务而设计的。 XLM-RoBERTa 的主要特性&#xff1a; 多语言能力&#xff1a;在使用 CommonCrawl 数据集的 100 种语言上进行训练&#xff0c;XLM-RoBERTa …

【SCAU数据挖掘】数据挖掘期末总复习题库应用题及解析

1. 给定圆的半径为e &#xff0c;令 MinPts3&#xff0c;考虑下面两幅图。 &#xff08;1&#xff09;哪些对象是核心对象? m,p,o,r(因为这些核心对象在半径e的范围内都至少包含MinPts3个对象) &#xff08;2&#xff09;哪些对象是直接密度可达的? 对象q是…

Thermo Fisher赛默飞TSQ单杆电源维修1R120380-0001

美国热电质朴分析仪电路板维修&#xff0c;液相色谱质谱联用仪维修&#xff0c;Thermo Fisher赛默飞世尔光谱仪IS10 IS5赛默飞主板维修。 公司仪器维修设备备有三相交流电源,变频电源&#xff0c;无油空压气源&#xff0c;标准化的维修平台、电子负载&#xff0c;耐压测试仪、老…

MongoDB和AI 赋能行业应用:零售

欢迎阅读“MongoDB 和 AI 赋能行业应用”系列的第三篇。 本系列重点介绍 AI 应用于不同行业的关键用例&#xff0c;涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 利用生成式 AI 技术&#xff08;Gen AI&#xff09;&#xff0c;零售商可以创造…

软考中级哪个科目比较简单,只为拿证?

中级科目包括信息系统、计算机网络等5个方向&#xff0c;共计15门课程。软考中级难度适中&#xff0c;考取后即可获得中级职称&#xff0c;因此性价比最高。 需要留意的是&#xff0c;这些科目中&#xff0c;有一些是每年只有一次考试的&#xff0c;有一些是每年有两次考试的&a…

java遇到问题 不行就 重启项目 清理缓存 在别人电脑试试

java遇到问题 不行就 重启项目 清理缓存 在别人电脑试试 java遇到问题 不行就 重启项目 清理缓存 在别人电脑试试

【机器学习】第2章 线性回归及最大熵模型

一、概念 1.回归就是用一条曲线对数据点进行拟合&#xff0c;该曲线称为最佳拟合曲线&#xff0c;这个拟合过程称为回归。 2.一个自变量 叫 一元线性回归&#xff0c;大于一个自变量 叫 多元线性回归。 &#xff08;1&#xff09;多元回归&#xff1a;两个x&#xff0c;一个…

qmt量化交易策略小白学习笔记第37期【qmt编程之指数数据--如何获取迅投商品市场指数行情数据】

qmt编程之获取商品市场指数数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取迅投商…

HPMicro:FEMC应用指南

先楫FEMC的基本概念介绍 FEMC (Flexible External Memory Controller)全称为多功能外部存储器控制器。作为并行接口控制器&#xff0c;FEMC具有访问存储数据速度快的特点。 HPM的FEMC只有一路&#xff0c;由于FEMC是并口&#xff0c;所以占用的管脚较多。而且HPM的FEMC信号引脚…

spring ioc和aop底层是使用什么实现的

Spring IOC底层实现 Spring IOC容器是Spring框架的核心&#xff0c;它负责创建和管理应用程序中的对象&#xff08;Bean&#xff09;。IOC容器底层实现主要依赖于以下几个关键组件和概念&#xff1a; 1、BeanFactory&#xff1a;这是Spring IOC容器的最底层接口&#xff0c;提…

【JS重点19】this指向问题总结

阅读本文章目标&#xff1a;够知道this在不同环境下的默认值&#xff0c;知道动态指定函数this值的方法 一&#xff1a;普通函数this指向 普通函数的调用方式决定了this的值&#xff0c;即谁调用普通函数&#xff0c;this就指向谁 setTimeout(function () {console.log(this)…