acwing算法学习笔记 ------ 双链表

1、定义

这里可以做一个投机取巧,我们不再像单链表去用head去存头和尾,直接让r[0] = 1,l[1] = 0; idx = 2.进行初始化,
    解释一下l[N] 和 r[N] l[N]:是表示指向左面下一个节点下标, r[N]:表示指向下一个节点的下标。大家不用担心idx会乱什么的,只要指向咱们做的对,那就没问题,idx就相当于一个小房子,给节点分担住处的。


2、实现 

2.1、添加操作:

 假如我们想在k的左面插入,也可以用上面我们推过的,即:add(l[k],x);

还有一种写法如下:在知道元素的时候可以用这个 

    r[0] = s.size()-1,l[s.size()-1] = 0;for(int i=1;i<s.size();i++){//插入操作(插入指向左右指针)int left = i-1,right = r[i-1];l[i] = left,r[i] = right;l[right] = i,r[left] = i;}
 例题如:小红数组操作

 2.2、删除操作

这里给出的删除,并不是真正意义上的删除,只是跳过这个点,让原有的指向l,r去指向这个点的下一个点

推荐例题:C-小苯的IDE括号问题(easy)_牛客小白月赛87 (nowcoder.com) 


 3、例题:来源于acwing

 

AC代码:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;/*
e[N]表示存一下节点的值
l[N]表示存这个节点的左面指向下一个的下标
r[N]表示存一下这个节点的右面指向的下一个下标
idx表示索引,当前用到了哪个空间,不要担心会乱套,因为l,r的指向
我们做好了那就没问题,idx---->比作小房子就好,里面住着e[N]和l[N],r[N];
*/
const int N = 1e5+10;
int e[N],l[N],r[N],idx;//初始化
void init()
{//头尾是为了方便我们辨识什么时候开始什么时候结束的//所以这个功能性结点不能删,可以看错是虚的r[0] = 1;l[1] = 0;idx = 2;
}//在k右面添加x(左面同理这里只需要让k = l[k]即可)
void add(int k,int x)
{e[idx] = x;r[idx] = r[k];l[idx] = k;l[r[k]] = idx;r[k] = idx;idx++;
}//删除第k个点
void remove(int k)
{r[l[k]] = r[k];l[r[k]] = l[k];
}int main()
{int m;cin >> m;init();for (int i = 0; i < m; i ++ ){string ch;cin >> ch;if(ch == "L"){int x;cin >> x;add(0,x);}else if(ch == "R"){int x;cin >> x;add(l[1],x);}else if(ch == "D"){int k;cin >> k;//元素是从下标为2的位置开始加入,所以你第k个插入的元素,//比如是第3个插入的元素,它的下标对应4,即:K+1remove(k+1);}else if(ch == "IL")//表示在第k个插入的数左侧插入一个数{int k,x;cin >> k >> x;add(l[k+1],x);}else{int k,x;cin >> k >> x;add(k+1,x);}}for(int i=r[0];i!=1;i=r[i]) cout << e[i] << ' ';cout << endl;return 0;
}

上述图片来源于acwing 大佬的题解中的图片, 欢迎小伙伴提问!

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[VNCTF2024]-PWN:shellcode_master解析(orw,用mmap代替read读文件)

查看保护 查看ida 在sandbox函数中&#xff0c;函数先使用了seccomp_init初始化&#xff0c;允许了所有系统调用&#xff0c;再用seccomp_rule_add来禁用掉了部分系统调用&#xff0c;其中包括execve和read seccomp_init函数可以进行系统调用全禁用和全允许初始化 seccomp_ru…

《高质量的C/C++编程规范》学习

目录 一、编程规范基础知识 1、头文件 2、程序的板式风格 3、命名规则 二、表达式和基本语句 1、运算符的优先级 2、复合表达式 3、if语句 4、循环语句的效率 5、for循环语句 6、switch语句 三、常量 1、#define和const比较 2、常量定义规则 四、函数设计 1、参…

python_pyecharts绘制漏斗图

python-pyecharts绘制漏斗图 from pyecharts.charts import Funnel from pyecharts import options as opts# 数据 data [("访问", 100), ("咨询", 80), ("订单", 60), ("点击", 40), ("展现", 20)]# 创建漏斗图 funnel …

uvloop,一个强大的 Python 异步IO编程库!

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 什么是uvloop库&#xff1f; 安装uvloop库 使用uvloop库 uvloop库的功能特性 1. 更…

【信息提取】FindSomething 浏览器插件

下载地址 FindSomething 浏览器插件 概述 在网页的源代码或js中找到一些有趣的东西 FindSomething 用于快速在网页的html源码或js代码中提取一些有趣的信息&#xff0c;包括可能请求的资源、接口的url&#xff0c;可能请求的ip和域名&#xff0c;泄漏的证件号、手机号、邮箱…

程序员可以做什么副业呢?

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…

2024年云南事业单位报名流程!明天就开始报名啦,千万不要错过哦

注意啦&#xff01;注意啦&#xff01;2024年云南事业单位报名即将开始&#xff01; ▶️公告已发布&#xff0c;2月26日上午9&#xff1a;00开始报名‼️ 相关时间节点 **报名时间&#xff1a;**2024年2月26日9:00至3月1日18:00 **资格初审时间&#xff1a;**2024年2月26日…

【Python】Windows本地映射远程Linux服务器上的端口(解决jupyter notebook无法启动问题)

创作日志&#xff1a; 学习深度学习不想在本地破电脑上再安装各种软件&#xff0c;我就用实验室的服务器配置环境&#xff0c;启动jupyter notebook时脑子又瓦特了&#xff0c;在自己Windows电脑上打开服务器提供的网址&#xff0c;那肯定打不开啊&#xff0c;以前在其它电脑上…

【服务发现--service】

1、service的定义 "Service"简写"svc”。Pod不能直接提供给外网访问&#xff0c;而是应该使用service。Service就是把Pod暴露出来提供服务&#xff0c;Service才是真正的“服务”&#xff0c;它的中文名就叫“服务”。可以说Service是一个应用服务的抽象&#…

校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码

云开发校园微社区微信小程序开源源码&#xff0c;这是一款云开发校园微社区-二手交易_兼职_交友_项目微信小程序开源源码&#xff0c;可以给你提供快捷方便的校园生活&#xff0c;有很多有趣实用的板块和功能&#xff0c;如&#xff1a;闲置交易、表白交友、疑问互答、任务兼职…

C++ //练习 8.9 使用你为8.1.2节(第281页)第一个练习所编写的函数打印一个istringstream对象的内容。

C Primer&#xff08;第5版&#xff09; 练习 8.9 练习 8.9 使用你为8.1.2节&#xff08;第281页&#xff09;第一个练习所编写的函数打印一个istringstream对象的内容。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*****…

NATS学习笔记(一)

NATS是什么&#xff1f; NATS是一个开源的、轻量级、高性能的消息传递系统&#xff0c;它基于发布/订阅模式&#xff0c;由Apcera公司开发和维护。 NATS的功能 发布/订阅&#xff1a;NATS的核心是一个发布/订阅消息传递系统&#xff0c;允许消息生产者发布消息到特定的主题…

制作ai语音助手

目录 一、总体介绍 二、唤醒 http://t.csdnimg.cn/3mf18 三、将语音唤醒和aiui结合 &#xff08;1&#xff09;项目合并 &#xff08;2&#xff09;修改CMakeList.txt &#xff08;3&#xff09;demo代码修改 1.添加库 2.在demo中添加唤醒功能的代码 3.尝试运行代码&am…

【数据结构和算法初阶(c语言)】数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)

1.何为数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。本质来讲就是在内存中去管理数据方式比如我们的增删查改。在内存中管理数据的方式有很多种&#xff08;比如数组结构、链式结构、树型结…

基于Pytorch的猫狗图片分类【深度学习CNN】

猫狗分类来源于Kaggle上的一个入门竞赛——Dogs vs Cats。为了加深对CNN的理解&#xff0c;基于Pytorch复现了LeNet,AlexNet,ResNet等经典CNN模型&#xff0c;源代码放在GitHub上&#xff0c;地址传送点击此处。项目大纲如下&#xff1a; 文章目录 一、问题描述二、数据集处理…

智能SQL生成:后端技术与LLM的完美结合

文章目录 引言一、什么是大模型二、为什么选择LLM三、开发技术说明四、系统架构说明五、编码实战1. Maven2. 讯飞大模型配置类3. LLM相关的封装4. 编写LLM的service5. 编写controller6. 运行测试 六、总结 引言 本篇文章主要是关于实现一个类似Chat2DB的根据自然语言生成SQL的…

新改进!基于改进粒子群算法的微网/综合能源系统多目标优化调度程序代码!

适用平台&#xff1a;MatlabYalmipCplex 程序提出了一种综合考虑微电网系统运行成本和环境保护成本的并网模式下微电网多目标优化调度模型&#xff0c;采用改进的粒子群算法对优化模型进行求解。程序算例丰富、注释清晰、干货满满&#xff0c;可扩展性和创新性很高&#xff01…

readproc.h

Ubuntu22.04系统中 编译自己写的程序的时候&#xff0c;报错&#xff0c;显示找不到readproc.h文件&#xff0c;通过安装libprocps-dev解决 sudo apt install libprocps-dev

c#高级-正则表达式

正则表达式是由普通字符和元字符&#xff08;特殊符号&#xff09;组成的文字形式 应用场景 1.用于验证输入的邮箱是否合法。 2.用于验证输入的电话号码是否合法。 3.用于验证输入的身份证号码是否合法。等等 正则表达式常用的限定符总结&#xff1a; 几种常用的正则简写表达式…

女生常用的社交app软件有哪些?分享女生用的最多的社交软件

随着科技的迅猛发展&#xff0c;社交软件也日益多样化。除了常见的社交平台&#xff0c;一些全新的社交软件如雨后春笋般涌现&#xff0c;为用户带来了更多元、更有趣的社交体验。这里为大家介绍 5 款女生用的最多的社交软件&#xff0c;它们分别是丛丛、青藤之恋、meetu、小奢…