【C++刷题】优选算法——链表
链表常用技巧和操作总结
- 常用技巧
画图
引入虚拟头节点
不要吝啬空间,大胆定义变量
快慢双指针 - 常用操作
创建一个新节点
尾插
头插
- 两数相加
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {int carry = 0;ListNode* newHead = new ListNode, *cur = newHead;while (l1 != nullptr && l2 != nullptr) {int num = l1->val + l2->val + carry;carry = num / 10;num = num % 10;cur->next = new ListNode(num);cur = cur->next;l1 = l1->next;l2 = l2->next;}while (l1 != nullptr) {int num = l1->val + carry;carry = num / 10;num = num % 10;cur->next = new ListNode(num);cur = cur->next;l1 = l1->next;}while (l2 != nullptr) {int num = l2->val + carry;carry = num / 10;num = num % 10;cur->next = new ListNode(num);cur = cur->next;l2 = l2->next;}if (carry != 0) {cur->next = new ListNode(carry);}return newHead->next;
}
- 两两交换链表中的节点
ListNode* swapPairs(ListNode* head) {if (head == nullptr || head->next == nullptr) return head;ListNode *front = head, *back = front->next, *newHead = new ListNode, *cur = newHead;while (true) {cur->next = back;ListNode* tmp = back->next;back->next = front;front->next = tmp;cur = front;if (tmp != nullptr && tmp->next != nullptr) {front = tmp;back = front->next;} else if (tmp != nullptr && tmp->next == nullptr) {cur->next = tmp;return newHead->next;} else {return newHead->next;}}
}
- 重排链表
ListNode* reverse(ListNode* head) {if (head == nullptr || head->next == nullptr) return head;ListNode* newHead = reverse(head->next);head->next->next = head;head->next = nullptr;return newHead;
}
void reorderList(ListNode* head) {ListNode *slow = head, *fast = head;while (fast != nullptr && fast->next != nullptr) {slow = slow->next;fast = fast->next->next;}ListNode* cur1 = head, *cur2 = reverse(slow);ListNode* newHead = new ListNode, *cur = newHead;while (cur1 != cur2 && cur2 != nullptr) {cur->next = cur1;cur1 = cur1->next;cur = cur->next;cur->next = cur2;cur2 = cur2->next;cur = cur->next;}
}
- 合并 K 个升序链表
// 解法一
ListNode* mergeKLists(vector<ListNode*>& lists) {// 小根堆priority_queue<ListNode*, vector<ListNode*>, Comp> pq;for (ListNode* e : lists) {if (e != nullptr) {pq.push(e);}}ListNode *newHead = new ListNode, *cur = newHead;while (!pq.empty()) {cur->next = pq.top();cur = cur->next;pq.pop();if (cur->next != nullptr) {pq.push(cur->next);}}return newHead->next;
}// 解法二
ListNode* merge_sort(vector<ListNode*>& lists, int start, int end) {if (start > end) return nullptr;else if (start == end) return lists[start];int mid = start + (end - start) / 2;ListNode* left = merge_sort(lists, start, mid);ListNode* right = merge_sort(lists, mid + 1, end);if (left == nullptr) return right;else if (right == nullptr) return left;ListNode *newHead = new ListNode, *cur = newHead;while (left != nullptr && right != nullptr) {if (left->val < right->val) {cur->next = left;left = left->next;} else {cur->next = right;right = right->next;}cur = cur->next;}while (left != nullptr) {cur->next = left;left = left->next;cur = cur->next;}while (right != nullptr) {cur->next = right;right = right->next;cur = cur->next;}return newHead->next;
}
ListNode* mergeKLists(vector<ListNode*>& lists) {return merge_sort(lists, 0, lists.size() - 1);
}
- K 个一组翻转链表
ListNode* reverseKGroup(ListNode* head, int k) {int total = 0;ListNode* cur = head;while (cur != nullptr) {++total;cur = cur->next;}ListNode* newHead = new ListNode;cur = newHead;while (head != nullptr) {int count = k;ListNode* tail = head;if (total >= k) {while (count-- && head != nullptr) {ListNode* tmp = head->next;head->next = cur->next;cur->next = head;head = tmp;}total -= k;}cur = tail;if (total < k) {cur->next = head;break;}}return newHead->next;
}
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
【C++刷题】优选算法——链表
链表常用技巧和操作总结 常用技巧 画图 引入虚拟头节点 不要吝啬空间,大胆定义变量 快慢双指针常用操作 创建一个新节点 尾插 头插 两数相加 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {int carry 0;ListNode* newHead new ListNode, *cur newHea…...
![](https://www.ngui.cc/images/no-images.jpg)
Flex和Bison
Flex和Bison是Linux和Unix环境下两个非常强大的工具,分别用于生成词法分析器和语法分析器。它们在编译器设计、文本处理等领域有着广泛的应用。下面我将详细介绍Flex和Bison的基本概念、功能、用法以及它们之间的关系。 一、Flex 1. 基本概念 Flex(其…...
![](https://www.ngui.cc/images/no-images.jpg)
Matlab-FPGA 小数转换为定点二进制小数脚本和转coe文件格式脚本
Matlab-FPGA 小数转换为定点二进制小数脚本: % 更新于2023年6月17日,修改旋转因子文件,不修改fpga %首先明确我们的二维FFT的数组维数,此为1024*8的二维矩阵,1024行,8列 column 1024; row 8; nk[]; Ncolumn*row; fo…...
![](https://i-blog.csdnimg.cn/direct/6907996a097b4f91b2c62ad5d499f23b.png)
逆向案例二十三——请求头参数加密,某区块链交易逆向
网址:aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo 抓包分析,发现请求头有X-Apikey参数加密,其他表单和返回内容没有加密。 直接搜索关键字,X-Apikey,找到疑似加密位置,注意这里…...
![](https://www.ngui.cc/images/no-images.jpg)
CSS 导航栏:设计、定制与优化
CSS 导航栏:设计、定制与优化 CSS(层叠样式表)是网页设计中不可或缺的一部分,它允许开发者通过定义样式来控制网页的布局和外观。在网页设计中,导航栏是一个关键元素,它帮助用户浏览网站并找到他们感兴趣的…...
![](https://www.ngui.cc/images/no-images.jpg)
JS 如何处理链接被用户点击中键的操作
今天在开发中遇到一个问题,在使用类似Bootstrap中的Tabs组件时,当在tab导航链接点击中键时会打开一个新的窗口访问链接,于是我尝试在别的普通链接上点击中键时也会如此,我猜测这是浏览器的默认行为。 由于我开发的是一个浏览器在…...
![](https://www.ngui.cc/images/no-images.jpg)
Android 11 使用HAL层的ffmpeg库(1)
1.frameworks/av/media目录下面的修改 From edd6f1374c1f15783d9920ebda22ea915e503775 Mon Sep 17 00:00:00 2001 From: GW00219471 <zhumingxingnoboauto.com> Date: Wed, 17 Jan 2024 15:16:10 0800 Subject: [PATCH] ?UTF-8?q?[V35CUX-4542]:E7A7BBE6A48Dcux20E8…...
![](https://i-blog.csdnimg.cn/direct/dfb412ede498439c94000357219f8733.jpeg#pic_center)
友力科技数据中心搬迁方案
将当前运行机房中的所有设备、应用系统安全搬迁至新数据中心机房,实现平滑切换、平稳过渡,最大限度地降低搬迁工作对业务的影响。 为了确保企事业单位能够顺利完成数据中心机房搬迁工作,我们根据实际经验提供了4个基本原则,希望能…...
![](https://www.ngui.cc/images/no-images.jpg)
GitHub敏感信息扫描工具
目录 功能设计 技术实现 程序使用 文件配置 下载地址 功能设计 GitPrey是根据企业关键词进行项目检索以及相应敏感文件和敏感文件内容扫描的工具,其设计思路如下: 根据关键词在GitHub中进行全局代码内容和路径的搜索(in:file,path),将项目结果做项目信息去重整理得到…...
![](https://i-blog.csdnimg.cn/direct/a8587e1894f646f5977d12e997aa2e2a.png)
Linux云计算 |【第一阶段】ENGINEER-DAY4
主要内容: 配置Linux网络参数、配置静态主机名、查看/修改/激活/禁用网络连接、指定DNS、虚拟网络连接、虚拟机克隆、SSH客户端、SCP远程复制、SSH无密码验证(SERVICE-DAY5)、虚拟网络类型 一、网络参数配置 修改网卡配置文件主要是需要配置…...
![](https://i-blog.csdnimg.cn/direct/d551f06b0c3541cd9d3aaec8f084cd79.gif)
C++与VLC制作独属于你的动态壁纸背景
文章目录 前言效果展示为什么要做他如何实现他实现步骤获取桌面句柄代码获取桌面句柄libvlc_media_player_set_hwnd函数 动态壁纸代码 总结 前言 在当今的数字世界中,个性化和自定义化的体验越来越受到人们的欢迎。动态壁纸是其中一种很受欢迎的方式,它…...
![](https://img-blog.csdnimg.cn/img_convert/557c3bdaec0e5c7fa1cb5697a22890e1.png)
平凯星辰黄东旭出席 2024 全球数字经济大会 · 开放原子开源数据库生态论坛
7 月 5 日,以“开源生态筑基础,数字经济铸未来”为主题的 2024 全球数字经济大会——开放原子开源数据库生态论坛在北京成功举办。平凯星辰(北京)科技有限公司联合创始人黄东旭发表了题为《TiDB 助力金融行业关键业务系统实践》的…...
Mac OS 下安装 NVM,1秒教会你
1.下载 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash或者wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash 2.安装成功后执行 nvm 提示 command not found 首先查看 ~/.bash_profile 文件是否存在&…...
![](https://i-blog.csdnimg.cn/direct/08239d04084845769fca2a956947cb1e.png#pic_center)
搭建博客系统#Golang
WANLI 博客系统 项目介绍 基于vue3和gin框架开发的前后端分离个人博客系统,包含md格式的文本编辑展示,点赞评论收藏,新闻热点,匿名聊天室,文章搜索等功能。 点击跳转:Github 项目开源地址 功能展示 B 站…...
![](https://i-blog.csdnimg.cn/direct/7665cfea626446508339c5eb986aefed.jpeg)
算法——滑动窗口(day6)
1004.最大连续1的个数 ||| 1004. 最大连续1的个数 III - 力扣(LeetCode) 题目解析: 这道题如果能转化为滑动窗口的话就会很简单,因为我们如果尝试去把0翻转为1再计数的话等到第2轮又得重新翻转回来,费时费力~ 那么我…...
![](https://i-blog.csdnimg.cn/direct/48c1271c4daa4dcc8256705443f997f0.jpeg)
推荐一款基于Spring Boot 框架开发的分布式文件管理系统,功能齐全,非常便捷(带私活源码)
前言 在数字化时代,文件管理是企业和个人用户的基本需求。然而,现有的文件管理系统往往存在一些痛点,如存储空间有限、文件共享困难、缺乏在线编辑功能、移动端适配性差等。这些问题限制了用户在不同设备和场景下的文件处理能力。 为了解决…...
![](https://i-blog.csdnimg.cn/direct/609d7dca5bef4882b1c32ec35f9aa899.png)
Mysql-查询
1.基本查询 //查询所有内容 select * from 表名;//查询指定字段 select 字段1,字段2,字段3.....from 表名;//查询时给字段起别名 select 字段1 as 别名1 , 字段2 as 别名2 ... from 表名;//去重查询 select distinct 字段列表 from 表名; …...
![](https://img-blog.csdnimg.cn/img_convert/831325d51dba84a67822d74916869ebd.jpeg)
广东科学技术职业学院计算机学院领导一行莅临泰迪智能科技参观交流
7月17日,广东科学技术职业学院计算机学院副院长张军、计算机学院副书记吴国庆、计算机学院大数据教学部部长谢文达、科技与校企合作部副部长黄相杰、科技与校企合作部副部长吴胜兵莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流,泰迪智能科技…...
![](https://i-blog.csdnimg.cn/direct/d34a2785538d4881941072833d329175.png)
exo 大模型算力共享;Llama3-70B是什么
目录 exo 大模型算力共享 exo框架的特点 如何使用exo框架 注意事项 结论 Llama3-70B是什么 一、基本信息 二、技术特点 三、性能与应用 四、未来发展 exo 大模型算力共享 exo框架的特点 异构支持:支持多种不同类型的设备,包括智能手机、平板电脑、笔记本电脑以及高…...
![](https://i-blog.csdnimg.cn/direct/b26f2fec767e455fa573a834e93b8d46.png)
测试——Junit
内容大纲: 常用的五个注解 测试用例顺序指定 参数化 测试套件 断言 1. 常用的五个注解 1.1 Test 通常情况下,我们输入要写在main方法下,此时我想直接输出: Test void Test01(){System.out.println("第一个测试用例"); } 1.2 BeforeAll AfterAll BeforeALL在Tes…...
![](https://www.ngui.cc/images/no-images.jpg)
BUG ImportError: cannot import name ‘QAction‘ from ‘PySide6.QtWidgets‘
BUG ImportError: cannot import name ‘QAction’ from ‘PySide6.QtWidgets’ 环境 PySide6 6.7.2详情 在参考 PyQt5 的代码写 Pyside6 的右键菜单时遇到的错误。 错误代码 from PySide6.QtWidgets import QAction错误原因: 在PySdie6中…...
![](https://img-blog.csdnimg.cn/img_convert/c33a4b6fa4575896221cbda9dab07179.webp?x-oss-process=image/format,png)
对某次应急响应中webshell的分析
文章前言 在之前处理一起应急事件时发现攻击者在WEB应用目录下上传了webshell,但是webshell似乎使用了某种加密混淆手法,无法直观的看到其中的木马连接密码,而客户非要让我们连接webshell来证实此文件为后门文件且可执行和利用(也是很恼火&a…...
![](https://i-blog.csdnimg.cn/direct/a88ce0f62ef7450786930a622828d1ef.png)
Vue3新特性
Vue3新特性 1、Composition API1.1 什么是 Composition API1.2 常用 Composition API1.2.1 setup1.2.2 ref1.2.3 reactive1.2.4 computed1.2.5 watchEffect、watchPostEffect、watchSyncEffect1.2.6 watch 2、生命周期2.1 Vue3生命周期钩子2.2 vue2 和 vue3 关于生命周期的对比…...
![](https://i-blog.csdnimg.cn/direct/48c1271c4daa4dcc8256705443f997f0.jpeg)
一套功能齐全、二开友好的即时通讯IM工具,提供能力库和UI库,支持单聊、频道和机器人(附源码)
前言 在当今数字化时代,即时通讯(IM)和实时音视频(RTC)功能已成为众多应用的标配。然而,现有的解-决方案往往存在一些痛点,如架构落后、成本高昂、数据安全性和隐私保护不足,以及二次开发和部署的复杂性。 为了解决这些问题&…...
![](https://i-blog.csdnimg.cn/direct/7c0f87e88b784613b5323c33e4e3be1a.png)
MySQL:JOIN 多表查询
多表查询 在关系型数据库中,表与表之间是有联系的,它们通过 外键 联系在一起,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。 MySQL多表查询是数据库操作中非常重要的一部分,它允许你…...
![](https://i-blog.csdnimg.cn/direct/997b4b9fd35246c48ca057e82c1fecef.png)
【机器学习】必会算法模型之:一文掌握 密度聚类,建议收藏。
密度聚类 1、引言2、密度聚类2.1 定义2.2 核心原理2.3 实现步骤2.4 算法公式2.5 代码示例 3、总结 1、引言 在机器学习的无监督学习领域,聚类是一项基础而重要的任务。 聚类算法通过将数据点分组,使同一组内的数据点具有更大的相似性,而组间…...
![](https://img-blog.csdnimg.cn/10bc7091f3af40f59cdbcf905cd703a2.png)
代码:前端与数据库交互的登陆界面
<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>登录</title> </head> <body>…...
![](https://i-blog.csdnimg.cn/direct/7c71b74dc5464e3798c5887685634939.png)
发电机基础知识:负载组
什么是发电机负载组? 简单地说,负载组是一种可以产生人工电力负载的设备,用于测试发电机并验证发电机组的性能,包括相关组件,以确保通过使发电机发动机达到适当的工作温度和压力来满足适当的负载。 它是如何工作的&a…...
![](https://i-blog.csdnimg.cn/direct/4e8e012589414ca6a787e06a1bb8aff8.png)
内网安全:各类密码的抓取
Mimikatz在线读取SAM文件 离线读取SAM文件 在线读取lsass进程 离线读取lsass进程 BrowserGhost浏览器密码抓取 Sharp-HackBrowserData浏览器密码抓取 SharpDecryptPwd数据库密码抓取 LaZagne各类密码的抓取 Windows其他类型抓NTLM Hash工具 sam文件和lsass进程就是Wind…...
![](https://www.ngui.cc/images/no-images.jpg)
前端面试题汇总2
1. CSS 中两个 .class1 .class2 从哪个开始解析 在 CSS 中,选择器 .class1 .class2 表示所有 class 为 class1 的元素中的 class 为 class2 的子元素。浏览器解析这个选择器时,从右向左解析。也就是说,浏览器首先找到所有 class 为 class2 的…...
怎么上传自己的做网站/seo助理
Java 导入 Java 导出 上传 前提准备2个Jar包: commons-fileupload-x.x.x.jar commons-io-x.x.x.jar 准备上传页面同步上传:<% page language"java" pageEncoding"UTF-8"%> <!DOCTYPE HTML> <html><head><…...
![](https://img-blog.csdnimg.cn/img_convert/a5914329b664d3089d6425080968fd08.png)
企业解决方案有哪些/贵州seo技术查询
我们基于寄存器的方式已经编写了LED驱动,实现点亮/熄灭LED,但是你有没有发现一个问题,就是假设LED修改了一个GPIO,那么需要对应的修改寄存器代码,非常繁琐,而且随着改板次数增加,那么会带来一个…...
![](https://img-my.csdn.net/uploads/201302/08/1360328968_3276.jpg)
软件应用大全/西安百度网站排名优化
简单的单线程队列 -- 工作的时候遇到劣质打印机。给打印机发消息,打印机就会打印,如果在打印机还在打印的时候,就 再发消息打印,就会出现消息丢失。所以需要给上一个任务一些处理的间隔时间. 单线程的消息队列示例 [java] view pl…...
![](https://img-blog.csdnimg.cn/img_convert/88d8304a5ad6ec450024a3877248988c.png)
如何建立网站自己做站长/网站提交入口大全
软件测试是确保软件质量的可靠手段,是软件开发过程中必不可少的重要环节。本文提出了面向复用的测试用例设计过程,为测试用例复用提供了实现策略。测试用例的复用对于缩短软件开发周期和降低软件开发成本具有极其重要的意义。 1、引言 随着软件工程领域的…...
![](http://static.cnbetacdn.com/thumb/article/2016/0522/8ef87c0c592068a.jpg_600x600.jpg)
免费营销网站制作/网站优化及推广方案
转自:http://www.cnbeta.com/articles/tech/503593.htm 2016年05月22日 15:49 10425 次阅读 稿源:雷锋网 Project Tango发布初期曾经一度被称为黑科技,但现如今已慢慢走进我们的生活。如果说Kinect是3D感应技术的开创者,那么Pro…...
合肥seo优化/天津百度整站优化服务
2019独角兽企业重金招聘Python工程师标准>>> 作者: ganzhijie 发表于 2010-09-02 15:59 原文链接 阅读: 19 评论: 0 Android中提供了判断手势的接口,所有我们可以根据提供的API来实现各种各样的手势功能来提高手机应用的用户体验。 下面是我写的一段小De…...