【LeetCode热题100】148. 排序链表(链表)
一.题目要求
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
二.题目难度
中等
三.输入样例
示例 1:

输入:head = [4,2,1,3]
输出:[1,2,3,4]
示例 2:

输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
示例 3:
输入:head = []
输出:[]
四.解题思路
解法1:用map按值大小存结点
解法2:归并排序(GPT)
五.代码实现
解1
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* sortList(ListNode* head) {ListNode* dummy = new ListNode(0);map<int,vector<ListNode*>> nodeMap;while(head){nodeMap[head->val].push_back(head);head = head->next;}ListNode* p = dummy;for(auto node : nodeMap){for(vector<ListNode*>::iterator it = node.second.begin(); it != node.second.end(); it++){(*it)->next = nullptr;p->next = *it;p = p->next;}}return dummy->next;}
};
解2
class Solution {
public:ListNode* sortList(ListNode* head) {if (!head || !head->next) return head;ListNode* mid = getMid(head);ListNode* left = sortList(head);ListNode* right = sortList(mid);return merge(left, right);}private:ListNode* getMid(ListNode* head) {ListNode* midPrev = nullptr;while (head && head->next) {midPrev = (midPrev == nullptr) ? head : midPrev->next;head = head->next->next;}ListNode* mid = midPrev->next;midPrev->next = nullptr; // 断开链表return mid;}ListNode* merge(ListNode* list1, ListNode* list2) {ListNode dummy(0);ListNode* ptr = &dummy;while (list1 && list2) {if (list1->val < list2->val) {ptr->next = list1;list1 = list1->next;} else {ptr->next = list2;list2 = list2->next;}ptr = ptr->next;}ptr->next = (list1) ? list1 : list2;return dummy.next;}
};
六.题目总结
归并排序在链表排序中非常有效,因为它可以利用链表的节点指针操作,无需像数组那样进行大量的元素交换,其时间复杂度是 O(NlogN),但通常比基于 std::map 的方法更快,因为它具有更好的常数因子和较低的内存使用。
递归分析:
在这里插入代码片
相关文章:
【LeetCode热题100】148. 排序链表(链表)
一.题目要求 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 二.题目难度 中等 三.输入样例 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输…...
Ubuntu Linux - Primavera P6 EPPM 安装及分享
引言 根据计划,近日我制作了基于Ubuntu Linux 的P6虚拟机环境,同样里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机,请先与Oracle Primavera销售代表取得联系,以获取所需的应…...
微信小程序开发学习笔记——3.11完成form评论案例的实现逻辑
>>跟着b站up主“咸虾米_”学习微信小程序开发中,把学习记录存到这方便后续查找。 课程连接:https://www.bilibili.com/video/BV19G4y1K74d?p25&vd_source9b149469177ab5fdc47515e14cf3cf74 一、javascript参考手册——splice https://www.…...
Linux/Ubuntu/Debian控制台启动的程序和terminal分离的方法-正在运行怎么关闭窗口
disown 是一个 shell 内置函数,它从 shell 的作业表中删除指定的作业,使它们免受挂起的影响。 使用方法如下: 首先,正常运行命令: 你的命令然后,按 Ctrl Z 暂停命令。 现在,运行ÿ…...
Lua-Lua与C的交互3
Lua与C的交互是指在Lua脚本中调用C语言编写的函数或者在C语言中调用Lua脚本中定义的函数。这种交互可以实现Lua和C语言之间的数据传递和函数调用。 Lua提供了一组API函数,可以在C语言中使用这些函数来与Lua进行交互。通过这些API函数,C语言可以将数据传…...
TensorFlow的介绍和简单案例
TensorFlow是一个开源的机器学习框架,由Google开发和维护。它旨在使构建和训练机器学习模型变得更加容易,同时提供高度灵活性和可扩展性。 TensorFlow基于数据流图的概念。数据流图是一个由节点和边组成的有向图,其中节点表示操作,边表示数据的流动。TensorFlow通过在数据…...
基于Java+SpringMVC+vue+element实现前后端分离校园失物招领系统详细设计
基于JavaSpringMVCvueelement实现前后端分离校园失物招领系统详细设计 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收…...
【Stable Diffusion】入门-04:不同模型分类+代表作品+常用下载网站+使用技巧
目录 1 模型简介2 模型文件构成和加载位置2.1 存储位置2.2 加载模型 3 模型下载渠道3.1 HuggingFace3.2 Civitai 4 模型分类4.1 二次元模型4.2 写实模型4.3 2.5D模型 1 模型简介 拿图片给模型训练的这个过程,通常被叫做“喂图”。模型学习的内容不仅包括对具体事物…...
vue3之带参数的动态路由
在应用中,可以使用<router-link> 内置组件或 $router.push 方法来导航到带参数的路由。 定义路由 // 引入 Vue 和 Vue Router import { createRouter, createWebHistory } from vue-router; // 引入组件 import Home from ../views/Home.vue; import …...
深入探讨GPT系列与其他NLP架构的流行度差异及其应用解析
Transformer问答-1 为什么现在GPT系列的decoder-only那么流行,而其它两者:encoder-only和encoder-decoder架构不流行了呢? GPT系列(特别是从GPT-3开始)的流行并不意味着encoder-only或encoder-decoder架构不再流行或不再重要。事实上&…...
实现兼容性良好的前端页面开发
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
Rust学习02:推荐一本入门书,免费的
都说Rust的学习曲线很陡峭,试过才知雀实不容易。 先说我的基础,非科班,自学Python,写过几个小程序。 我买书从来不扣扣嗖嗖的,所以先啃了几本Rust的入门书,包括: Tim McNamara的《Rust实战》&am…...
npm run dev命令的执行顺序和原理
当我们在开发vue、react等项目的时候经常会用npm run *命令,那么当我们执行这个命令的时候具体都做了些什么呢?接下来我们就来详细探索一下 当执行npm run dev命令时,npm会按照以下步骤进行操作: 1. 查找并执行脚本: …...
C# SM2加解密 ——国密SM2算法
SM2 是国家密码管理局组织制定并提出的椭圆曲线密码算法标准。 本文使用第三方密码库 BouncyCastle 实现 SM2 加解密,使用 NuGet 安装即可,包名:Portable.BouncyCastle,目前最新版本为:1.9.0。 using Org.BouncyCastl…...
【Machine Learning】Suitable Learning Rate in Machine Learning
一、The cases of different learning rates: In the gradient descent algorithm model: is the learning rate of the demand, how to determine the learning rate, and what impact does it have if it is too large or too small? We will analyze it through the follow…...
力扣每日一题 矩阵中移动的最大次数 DP
Problem: 2684. 矩阵中移动的最大次数 复杂度 ⏰ 时间复杂度: O ( n m ) O(nm) O(nm) 🌎 空间复杂度: O ( n m ) O(nm) O(nm) Code class Solution { public int maxMoves(int[][] grid){int n grid.length;int m grid[0].length;int[][] f new int[n][m]…...
计算机网络 |内网穿透
其实内网穿透,也挺好玩的,如果在大学的时候,那个时候讲计算机网络的老师能横向延展,估计课也会更有趣不少,本来计算机网络这门课就是计算机课程中可玩性最搞的。 只能说,怪可惜的 回到正题,内网…...
爬虫学习 Scrapy中间件代理UA随机selenium使用
目录 中间件UA、代理处理---process_requestUA随机 代理处理seleniumscrapy 中间件 控制台操作 (百度只起个名 scrapy startproject mid scrapy genspider baidu baidu.com setting.py内 ROBOTSTXT_OBEY FalseLOG_LEVEL "WARNING"运行 scrapy crawl baidu middle…...
React理念——Fiber架构的主要原理
React理念——Fiber架构的主要原理 React 理念CPU 的瓶颈IO 的瓶颈 Fiber的产生及原理如何构建副作用链表 React 理念 从官网看到React的理念: React 是用 JavaScript 构建快速响应的大型 Web 应用程序的首选方式。它在 Facebook 和 Instagram 上表现优秀。 可见&a…...
[蓝桥杯练习题]确定字符串是否包含唯一字符/确定字符串是否是另一个的排列
确定字符串是否包含唯一字符 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);map<char,int>m;string s;cin>>s;for(int i0;i<s.size();i){if(isalpha(s[i]))s[i]tolower(s[i]);if(…...
Taotoken的TokenPlan套餐如何实现更经济的模型调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的TokenPlan套餐如何实现更经济的模型调用 1. 理解TokenPlan的计费模式 在模型应用开发过程中,成本的可预测性…...
Rydberg原子量子门实现原理与优化技术
1. Rydberg原子平台中的量子门实现基础1.1 Rydberg原子特性与量子计算优势Rydberg原子是指外层电子被激发到高主量子数能级的原子态,这类原子具有三个关键特性使其成为量子计算的理想平台:强偶极-偶极相互作用:当两个原子同时处于Rydberg态时…...
Agent开发面试通关攻略:吃透稳拿offer
阅读前置:2026年当下最卷也最缺人的AI岗位,一定是AI Agent开发。最近刷遍CSDN、牛客、力扣最新面经,发现一个非常明显的招聘趋势:普通大模型微调岗位饱和内卷,而AI Agent开发岗位人才严重缺口,薪资更高、竞…...
Simulink中Repeating Sequence锯齿波显示恒为0解决方案
锯齿波设置如图1时,其示波器显示恒为0(如图2)。图1图2于是新建模型,只添加Repeating Sequence模块,采用原始设置发现可以正常输出锯齿波,于是调整时间参数,发现当时间设置为≥[0 0.06]时可以正常…...
PlayAI语音合成质量到底如何?12款竞品横向对比+5项MOS/LSD/STOI硬指标揭榜
更多请点击: https://kaifayun.com 第一章:PlayAI语音合成质量评测报告 PlayAI 是一款面向开发者与内容创作者的实时语音合成(TTS)服务,支持多语种、多音色及情感可控输出。本报告基于客观可复现的评测流程࿰…...
武汉国电华美16875kVA串联谐振试验装置,这手活儿细
在超高压变电站和长距离电缆的现场,交流耐压试验是检验设备绝缘的“最后一关”。这位老师傅经手过不少大工程,他说,面对GIS、大型变压器这些“大块头”电容性试品,能不能顺利“过关”,往往就看串联谐振装置顶不顶得住。…...
招行+工行:ReAct(Reasoning + Acting) 讲清楚,并结合 金融场景(含自进化智能体) 给出可直接用的案例
下面我把 ReAct(Reasoning Acting) 讲清楚,并结合 ** 金融场景(含自进化智能体)** 给出可直接用的案例与话术,适合分享 / 汇报。一、ReAct 是什么(一句话)ReAct 推理(T…...
从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)
从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)当你第一次打开MPIIFaceGaze或EyeDiap数据集的压缩包时,那种面对杂乱文件夹和神秘.mat文件的迷茫感,我太熟悉了。作为计算机视觉工程师…...
反向海淘站点常见配置故障复盘与数据一致性优化方案
摘要反向海淘独立站运行过程中,容易出现价格换算异常、页面语种错乱、商品同步失败、订单状态停滞、运费计算偏差等问题。多数故障并非系统底层缺陷,而是配置逻辑理解偏差、数据规范不统一引发。本文结合实际运维场景,汇总高频故障成因&#…...
【C++】零基础入门 · 第 5 节:函数基础
前面四节我们写的代码都集中在 main 函数里。随着程序变复杂,所有逻辑堆在一起会越来越难维护。函数就是用来解决这个问题的——它把一段代码「打包」起来,取个名字,需要的时候调用就行。 1. 为什么需要函数 假设你需要在程序的不同地方打印一行分隔线: cout << &…...
