【算法学习之路】8.栈和队列

embedded/2025/3/11 10:05:32/

队列

  • 前言
  • 一.简介
  • 二.题目
    • 1
    • 2

前言

我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,题单正在更新,其他的也会陆陆续续的更新,希望大家点赞收藏我会尽快更新的!!!

一.简介

队列多用于辅助,很少有单独的题目。例如图的BFS,需要队列辅助实现。
重点是的应用以及题目。—先进先出(如左右匹配)
注意:做题时,多数使用数组直接模拟队列)或者直接用c++STL中的stack(queue)

二.题目

1

洛谷P4387 【深基15.习9】验证序列
在这里插入图片描述
思路:用模拟

按入顺序入,如果顶元素与出序列的元素相同,就将其弹出。

首先将入序列的第i个元素压到“stack”中,(i, j分别是入序列和出序列的下标)

判断(注意用while判断,因为可能连续弹出)“stack”中的顶元素是否和出序列中的第j个元素一致(为空就不用判断了)如果一致则弹出顶元素,j++;如果不一致则继续压入入序列中的第i + 1个元素。

继续判断顶元素是否和出序列中的第j个元素一致,直到i到达入序列的末尾。

最后如果“stack”为空或指针j到达出序列的末尾就输出Yes,否则输出No

#include <iostream>
#include <stack>
using namespace std;
int a[100005], b[100005];
int main() {stack<int> s;int q, n; cin >> q;while (q--) {cin >> n;while (!s.empty()) {s.pop();}for (int i = 0; i < n; i++) {cin >> a[i];}for (int i = 0; i < n; i++) {cin >> b[i];}int j = 0;for (int i = 0; i < n; i++) {s.push(a[i]);while (s.top() == b[j]) {s.pop();j++;if (s.empty()) {break;}}}if (s.empty()) {cout << "Yes" << endl;}else {cout << "No" << endl;}}return 0;
}

2

力扣735. 小行星碰撞
在这里插入图片描述
思路:用模拟

以下情况不会发生碰撞,可把当前行星压入
1.为空,不管当前行星是正是负(往左还是往右)都要压入
2.当前行星和顶行星同号说明同向移动不会碰撞;
3.当前行星往右移动,顶行星向左移动也不会碰撞;

只有一种情况会发生碰撞,需要出:当前行星往左,顶行星往右,做判断:
1.顶元素大于abs(当前元素),当前元素被撞毁;
2.顶元素等于abs(当前元素),顶弹出和当前元素抵消;
3.顶元素小于abs(当前元素),顶弹出,并与新顶继续完成上述判断;

最终返回即可。

class Solution {
public:vector<int> asteroidCollision(vector<int>& asteroids) {vector<int> ans;int n = asteroids.size();for(int i = 0; i < n; i++){if(ans.empty()){ans.push_back(asteroids[i]);}else {if(ans.back() < 0){ans.push_back(asteroids[i]);}else{if(asteroids[i] > 0){ans.push_back(asteroids[i]);}else{if(asteroids[i] + ans.back() > 0){continue;}else if(asteroids[i] + ans.back() == 0){ans.pop_back();}else{while(!ans.empty()&&ans.back()>0&&ans.back()+asteroids[i]<0){ans.pop_back();}if(ans.empty() || ans.back() < 0){ans.push_back(asteroids[i]);}else if(ans.back() + asteroids[i] == 0){ans.pop_back();}}}}}}return ans;}
};

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

相关文章

一站式3D虚拟展厅搭建方案,让企业展示更高效

在数字化浪潮中&#xff0c;众多企业倾向于采用线上3D虚拟展厅来展现其产品特色、环境风貌及企业实力。然而&#xff0c;构建一个高质量的3D虚拟展厅不仅要求专业的技术背景&#xff0c;还需投入大量的时间和人力资源。视创云展能够以低成本高效率地搭建3D虚拟展厅&#xff0c;…

Bug:QT不能生成可执行文件

问题描述&#xff1a;为了生成可执行文件&#xff0c;将项目以release方式进行构建&#xff0c;并且在.pro文件中加入 TEMPLATE app #这生成一个exe QMAKE_LFLAGS -no-pie 并且执行run qmake&#xff0c;生成的仍是shared library!!! 解决方法&#xff1a;将下面代码放在.…

MyBatis Mapper 接口的作用,以及如何将 Mapper 接口与 SQL 映射文件关联起来

MyBatis Mapper 接口在 MyBatis 框架中扮演着至关重要的角色&#xff0c;它充当了 Java 代码与 SQL 映射文件之间的桥梁&#xff0c;使得我们可以通过面向对象的方式来操作数据库。 Mapper 接口的作用&#xff1a; 定义数据库操作方法: Mapper 接口中定义的方法与 SQL 映射文…

Qt:网络编程

目录 UDP Socket UDP服务器编写 UDP客户端编写 TCP Socket TCP服务器编写 TCP客户端编写 HTTP Client 网络编程&#xff0c;操作系统提供的一组 API(Socket API) C 标准库中&#xff0c;并没有提供网络编程的 api 的封装 进行网络编程的时候&#xff0c;本质上是在编写…

【GPT入门】第8课 大语言模型的自洽性

【GPT入门】第8课 大语言模型的自洽性 1.自洽性概念2.代码&#xff08;观察执行结果&#xff09;3.自洽性核心思想 1.自洽性概念 大模型的自洽性&#xff08;self - consistency&#xff09;是指在推理阶段&#xff0c;大模型通过生成多个答案并选择出现频率最高的那个&#x…

Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(上)

在 Spring Boot 生态中&#xff0c;dynamic-datasource-spring-boot-starter 是一个非常实用的组件&#xff0c;它为我们在多数据源场景下提供了便捷的解决方案。在上一篇文章《一分钟上手&#xff1a;如何创建你的第一个 Spring Boot Starter》中&#xff0c;我们学习了如何创…

deepseek的regflow安装mac版本

deepseek的ragflow部署安装 一:ollama安装,自行完成,我本地已安装 二:查看大模型情况oll::命令ollama list,我本地无ragflow 三:docker安装:命令docker version ,自行完成,我本地已安装 四:安装知识库软件ragflow: 简单科普下Ragflow 是一个基于深度学习模型的问答生成工具&…

WPS条件格式:B列的值大于800,并且E列的值大于B列乘以0.4时,这一行的背景标红

一、选择数据区域 选中需要应用条件格式的区域&#xff08;例如A2:E100 &#xff09;。 二、打开条件格式 点击“开始”选项卡&#xff0c;选择“条件格式” > “新建规则”。 三、选择规则类型 选择“使用公式确定要设置格式的单元格”。 四、输入公式 在公式框中输入以…