手撕算法——链表

算法基础——链表-CSDN博客

一、排队顺序

题⽬来源:洛⾕

题⽬链接:B3630 排队顺序 - 洛谷

难度系数:★

1. 题目描述

2. 算法原理

        本题相当于告诉了我们每⼀个点的后继,使⽤静态链表的存储⽅式能够很好的还原这个队列。

        数组 [1, n的下标可以当做据域,根据题意修指针域即可。

 

注意:可以不需要 e[N] 数组,输出下标即可 

3. 参考代码 

#include <iostream>using namespace std;const int N = 1e6 + 10;int n, h;
int ne[N];int main()
{cin >> n;for(int i = 1; i <= n; i++) cin >> ne[i];cin >> h;// 遍历链表for(int i = h; i; i = ne[i]){cout << i << " ";}return 0;
}

二、单向链表

题⽬来源:洛⾕

题⽬链接:B3631 单向链表 - 洛谷

难度系数:★

1. 题目描述

2. 算法原理

        链表模板题,直接实现⼀个单链表即可。

3. 参考代码

#include <iostream>using namespace std;const int N = 1e5 + 10, M = 1e6 + 10;// 链表
int h, id, e[N], ne[N];
int mp[M]; // mp[i] 用来标记 i 这个元素存在什么位置int main()
{int q; cin >> q;// 初始化id++;e[id] = 1;mp[1] = id;while(q--){int op, x, y;cin >> op >> x;int p = mp[x]; // x 存的位置if(op == 1) // x 后面插入{cin >> y;id++;e[id] = y;ne[id] = ne[p];ne[p] = id;mp[y] = id; // 标记 y 这个元素存的位置}else if(op == 2) // 查询 x 后面的元素{cout << e[ne[p]] << endl;}else // 删除 x 后面的元素{ne[p] = ne[ne[p]];}}return 0;
}

三、队列安排

题⽬来源:洛⾕

题⽬链接:P1160 队列安排 - 洛谷

难度系数:★★

1. 题目描述

2. 算法原理

        频繁的在某⼀个位置之前和之后插⼊元素,因此可以⽤双向循环的链表来模拟。

3. 参考代码

#include <iostream>using namespace std;const int N = 1e5 + 10;// 双向链表
int h, pre[N], ne[N];
bool st[N]; // st[x] 表示 x 这个元素是否已经被删除int n, m;int main()
{cin >> n;// 初始化pre[1] = h;ne[h] = 1;for(int i = 2; i <= n; i++){int k, p; cin >> k >> p;if(p == 0){// i 放在 k 的左边ne[i] = k;pre[i] = pre[k];ne[pre[k]] = i;pre[k] = i;}else{// i 放在 k 的右边pre[i] = k;ne[i] = ne[k];pre[ne[k]] = i;ne[k] = i;}}cin >> m;while(m--){int x; cin >> x;// 将 x 删除if(st[x] == true) continue;ne[pre[x]] = ne[x];pre[ne[x]] = pre[x];st[x] = true; // 标记 x 已经被删除}for(int i = ne[h]; i; i = ne[i]){cout << i << " ";}return 0;
}

四、约瑟夫问题

题⽬来源:洛⾕

题⽬链接:P1996 约瑟夫问题 - 洛谷

难度系数:★

1. 题目描述

2. 算法原理

        使⽤循环链表模拟即可。

3. 参考代码

#include <iostream>using namespace std;const int N = 110;int n, m;
int ne[N];int main()
{cin >> n >> m;// 创建循环链表for(int i = 1; i < n; i++) ne[i] = i + 1;ne[n] = 1;// 模拟约瑟夫游戏的过程int t = n;for(int i = 1; i <= n; i++) // 执行 n 次出圈操作{for(int j = 1; j < m; j++) // 让 t 向后移动 m - 1 次{t = ne[t];}cout << ne[t] << " ";ne[t] = ne[ne[t]];}return 0;
}

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

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

相关文章

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…

kotlin init执行顺序

一 代码 kotlin: package test.fclass Test1 { }class TestInit(s: String, i: Int) {var name: String? nullvar age 0private var a :Int 1init {this.name sthis.age iprintln("init代码块: $name, $age")}}转成java // Test1.java package test.f;import…

使用cursor开发java案例——springboot整合elasticsearch

安装elasticsearch 打开cursor&#xff0c;输入如下提示词 使用springboot整合elasticsearch。其中elasticsearch服务器ip&#xff1a;192.168.236.134 管理员用户名elastic 管理员密码 PdQy_xfR2yLhpok*MK_ 监听端口9200点Accept all 使用idea打开生成的项目 &#xff0…

Java Collection API增强功能系列之一 Arrays.asList()

在Java编程中&#xff0c;Arrays.asList() 是一个高频使用却又容易引发陷阱的工具方法。它能够快速将数组转换为列表&#xff0c;但其特殊行为常常让开发者踩坑。本文将深入剖析该方法的本质特性&#xff0c;并揭示其使用时的注意事项。一、方法定义与基础用法 1. 方法签名 p…

vue3 项目的最新eslint9 + prettier 配置

注意&#xff1a;eslint目前升级到9版本了 在 ESLint v9 中&#xff0c;配置文件已经从 .eslintrc 迁移到了 eslint.config.js 配置的方式和之前的方式不太一样了&#xff01;&#xff01;&#xff01;&#xff01; 详见自己的语雀文档&#xff1a;5、新版eslint9prettier 配…

基于FPGA的16QAM+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 16QAM调制解调原理 2.2 帧同步 3.Verilog核心程序 4.完整算法代码文件获得 1.算法仿真效果 vivado2019.2仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 设置SNR12db 将FPGA数据导入到MATLAB显…

[学成在线]06-视频分片上传

上传视频 需求分析 教学机构人员进入媒资管理列表查询自己上传的媒资文件。 点击“媒资管理” 进入媒资管理列表页面查询本机构上传的媒资文件。 教育机构用户在"媒资管理"页面中点击 "上传视频" 按钮。 点击“上传视频”打开上传页面 选择要上传的文件…

Maven安装与环境配置

首先我们先介绍一些关于Maven的知识&#xff0c;如果着急直接看下面的安装教程。 目录 Maven介绍 Maven模型 Maven仓库 Maven安装 下载 安装步骤 Maven介绍 Apache Maven是一个项目管理和构建工具&#xff0c;它基于项目对象模型(Project Object Model , 简称: POM)的概念…

【新能源汽车温度采集与控制系统设计深度解析】

面向汽车行业研发与测试测量设备从业者的技术指南 一、硬件架构设计 新能源汽车的温度采集与控制系统是保障电池、电机、电控等核心部件安全运行的核心技术之一。其硬件架构需兼顾高精度、抗干扰、可靠性与集成化&#xff0c;以下从信号调理电路、ADC模块、隔离设计三个维度展…

AI Tokenization

AI Tokenization 人工智能分词初步了解 类似现在这个&#xff0c;一格子 一格子&#xff0c;拼接出来的&#xff0c;一行或者一句&#xff0c;像不像&#xff0c;我们人类思考的时候组装出来的话&#xff0c;并用嘴说出来了呢。

React(四)setState原理-性能优化-ref

setState详解 实现原理 开发中我们并不能直接修改State来重新渲染界面&#xff1a; 因为修改State之后&#xff0c;希望React根据最新的State来重新渲染界面&#xff0c;但这种方式的修改React并不知道数据发生了变化&#xff1b; React并没有类似于Vue2中的Object.defineP…

SSH密钥认证 + 文件系统权限控制 + Git仓库配置+封存与解封GIT仓库

在本地服务器上实现多个用户仅通过git push操作修改仓库、禁止其他改写方式的需求&#xff0c;可以通过以下步骤实现&#xff1a; 方法概述 通过SSH密钥认证 文件系统权限控制 Git仓库配置&#xff0c;确保用户仅能通过git push命令提交修改&#xff0c;而无法通过直接操作服…

全文通读:126页华为IPD集成产品开发与DFX实战【文末附可编辑PPT下载链接】

绑定资料内容: 12023华为流程体系及落地实施【108页 PPT】.pptx22024版基于华为IPD与质量管理体系融合的研发质量管理【63页】.pptx

//TODO 动态代理的本质?

待解决 //TODO 面试题 为啥mybatis的mapper只有接口没有实现类&#xff0c;但它却能工作&#xff1f;?(ai参考,待深究源码) 1. 动态代理生成代理对象 MyBatis 使用 JDK 动态代理 为每个 Mapper 接口生成代理对象&#xff1a; • 核心类&#xff1a;MapperProxy&#xff08;…

C++11中智能指针的使用(shared_ptr、unique_ptr、weak_ptr)

C11中智能指针的使用(shared_ptr、unique_ptr、weak_ptr) 一、shared_ptr原理 shared_ptr 是另一种智能指针&#xff0c;用于实现多个 shared_ptr 实例共享同一个对象的所有权。它通过内部的控制块&#xff08;通常是一个包含计数器和指向对象的指针的结构&#xff09;来管理…

2024年认证杯SPSSPRO杯数学建模B题(第二阶段)神经外科手术的定位与导航全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 B题 神经外科手术的定位与导航 原题再现&#xff1a; 人的大脑结构非常复杂&#xff0c;内部交织密布着神经和血管&#xff0c;所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术&#xff0c;通常需要…

尝试在软考62天前开始成为软件设计师-信息系统安全

安全属性 保密性:最小授权原则(能干活的最小权限)、防暴露(隐藏)、信息加密、物理保密完整性(防篡改):安全协议、校验码、密码校验、数字签名、公证 可用性:综合保障( IP过滤、业务流控制、路由选择控制、审计跟踪)不可抵赖性:数字签名 对称加密 DES :替换移位 3重DESAESR…

Rocky9.5基于sealos快速部署k8s集群

首先需要下载 Sealos 命令行工具&#xff0c;sealos 是一个简单的 Golang 二进制文件&#xff0c;可以安装在大多数 Linux 操作系统中。 以下是一些基本的安装要求&#xff1a; 每个集群节点应该有不同的主机名。主机名不要带下划线。 所有节点的时间需要同步。 需要在 K8s …

G口服务器和普通服务器之间的区别

今天小编主要来为大家介绍一下G口服务器和普通服务器之间的区别&#xff01; 首先&#xff0c;从硬件配置上看&#xff0c;普通服务器通常都会配备中央处理器、内存和硬盘等基本的硬件配置&#xff0c;能够适用于各种应用程序和服务&#xff1b;G口服务器除了基础的硬件配置还增…

Cursor软件如何刷新机器码流程

一.退出Cursor软件账号 打开Cursor软件&#xff0c;点击设置-->General-->Account-->Log out,现将Cursor软件上登录的账户退出。 二.将Cursor官网上登录的Cursor账户也清空掉 点击头像--> ACCOUNT SETTINGS -->Account-->Advanced-->Delete Account-->…