2023-02-20 leetcode-insertionSortList
摘要:
记录leetcode-insertionSortList的反思
要求:
https://leetcode.cn/problems/insertion-sort-list/
Given the head of a singly linked list, sort the list using insertion sort, and return the sorted list's head.
The steps of the insertion sort algorithm:
- Insertion sort iterates, consuming one input element each repetition and growing a sorted output list.
- At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list and inserts it there.
- It repeats until no input elements remain.
The following is a graphical example of the insertion sort algorithm. The partially sorted list (black) initially contains only the first element in the list. One element (red) is removed from the input data and inserted in-place into the sorted list with each iteration.
数据结构相关:
- 链表
- 单向链表
- 指针
思路:
- 其实还是基于链表的特性,给链表排序, 在不要求时间复杂度的情况下, 直接插入排序
- 算法倒是很直白暴力, 没有太多弯弯绕绕的,所以可以拿这个当作切入
- 重点就在于对链表这个数据结构的操作了,此处尤其要注意边界
- 链表为空的场景
- 链表的首元素处理
- 链表的尾元素处理
- 向链表插入元素的指针处理
- 单向链表作为各种数据结构中最简单的, 基本操作如果不能熟练掌握是不能有借口的
- 并且单链表的操作,基本只涉及指针处理, 可以体现对指针的理解
更深一层的思考:
- 最基本的思考是对于原有链表的遍历, 和对新链表的遍历插入
- 如果用最朴素的做法, 那么时间复杂度将是O(n^2)
- 问题的关键在于对于新的链表, 不用从头遍历, 就能找到要插入的位置
关于新链表插入位置的思考:
- 可以换个思路,每次遍历旧链表,都找出比上次大的元素
- 这样在插入新链表的时候, 就只用插入新链表的末尾
题解:
题解一:
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* insertionSortList(ListNode* head) {if(!head || !head->next) return head;ListNode *sorted_head = new ListNode(-1);sorted_head->next = head;ListNode *curr = head;while(curr && curr->next){if(curr->val <= curr->next->val) curr=curr->next;else{ListNode *tmp = curr->next;curr->next = tmp->next;ListNode *insert_node = sorted_head;while(insert_node->next->val <= tmp->val ) insert_node = insert_node->next;// insert the node into sorted list tmp->next = insert_node->next;insert_node->next = tmp;}}return sorted_head->next;}
};
题解二:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};ListNode *insertionSortList(ListNode *head) {// zero or one element in listif (head == NULL || head->next ==NULL){return head;}ListNode *pSorted = NULL;while ( head != NULL ){/* remember the head */ListNode *pHead = head;/* trailing pointer for efficient splice */ListNode **ppTrail = &pSorted;/* pop head off list */head = head->next;/* splice head into sorted list at proper place */while( *ppTrail!=NULL && pHead->val > (*ppTrail)->val ) {ppTrail = &(*ppTrail)->next;}pHead->next = *ppTrail;*ppTrail = pHead;}return pSorted;
}void printList(ListNode* h)
{while(h!=NULL){printf("%d ", h->val);h = h->next;}printf("\n");
}ListNode* createList(int a[], int n)
{ListNode *head=NULL, *p=NULL;for(int i=0; i<n; i++){if (head == NULL){head = p = new ListNode(a[i]);}else{p->next = new ListNode(a[i]);p = p->next;}}return head;
}int main(int argc, char** argv)
{int n = 10;if (argc>1){n = atoi(argv[1]);}srand(time(NULL));int *a = new int[n];for(int i=0; i<n; i++){a[i] = rand()%n + 1;}ListNode *p = createList(a, n);printList(p);printList(insertionSortList(p));delete[] a;
}
相关文章:
2023-02-20 leetcode-insertionSortList
摘要: 记录leetcode-insertionSortList的反思 要求: https://leetcode.cn/problems/insertion-sort-list/ Given the head of a singly linked list, sort the list using insertion sort, and return the sorted lists head. The steps of the insertion sort algorithm: In…...
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
环形链表排列硬币合并两个有序数组(没错,出现过一次的LeetCode合并数组又双叒叕出现了!)经典算法题java解法 目录1 环形链表题目描述解题思路与代码解法一:哈希表解法二:双指针2 排列硬币题目描述解题思路与…...
网络编程学习一
1、初识网络编程2、网络编程三要素3、三要素(IP)4、IPV4的一些小细节5、Inetaddress类的使用package com.leitao.demo.network;import java.net.InetAddress; import java.net.UnknownHostException;/*** Description: TODO* Author LeiTao* Date 2023/2…...
Javascript 立即执行函数
IIFE,一般称为立即执行函数。你可能会问我,*“嘿!我知道正常的函数表达式是什么样子的,但是 IIFE 到底是什么?”。*好吧,这正是我今天要在本文中回答的问题。 函数表达式 在了解立即调用函数表达式之前,让…...
基于Django和vue的微博用户情感分析系统
完整代码:https://download.csdn.net/download/weixin_55771290/87471350概述这里简单说明一下项目下下来直接跑起的方法。前提先搞好python环境和vue环境,保证你有一个账户密码连上数据库mysql。1、pip install requirements.txt 安装python包2、修改mysql数据库的…...
【C++】IO流
🌈欢迎来到C专栏~~IO流 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤…...
【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练
【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练 【论文原文】:CLEVE: Contrastive Pre-training for Event Extraction 【作者信息】:Wang, Ziqi and Wang, Xiaozhi and Han, Xu and Lin, Yankai and Hou, Lei and Liu, Zhiyuan and Li, Peng and …...
《自动驾驶规划入门》专栏结语
一、 源起 2021年10月12日,化学工业出版社的金编辑根据博客中留下的微信号联系上我,问我有没有出书的想法。从小到大,书与文字在我心里是有着神圣地位的。我在“想试试”与“害怕做不好”这两种矛盾的心情中,还是先应了下来。签了…...
【数据结构与算法】2.八大经典排序
文章目录简介1.分析排序算法2.插入排序2.1.直接插入排序2.2.希尔排序3.选择排序3.1.直接选择排序3.2.堆排序3.2.1.堆的数据结构3.2.2.算法实现4.交换排序4.1.冒泡排序4.2.快速排序5.归并排序6.基数排序7.八大排序算法总结简介 排序对于任何一个程序员来说,可能都不会…...
Windows 免安装版mysql,快速配置教程
简单步骤 下载并解压mysql压缩包,把 “<mysql根目录>/bin” 路径添加到系统环境变量path中命令行执行 mysqld --initialize --console,初始化data目录(数据库表文件默认存放在" <mysql安装根目录>/data "目录下&#…...
空间误差分析:统一的应用导向处理(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
【C++】引用、内联函数、auto关键字、范围for、nullptr
引用什么叫引用引用的特性常引用使用场景传值、传引用效率比较引用和指针的区别内联函数auto关键字(C11)基于范围的for循环(C11)指针空值nullptr(C11)引用 什么叫引用 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内…...
pytest数据驱动
文章目录一、数据驱动概念二、数据驱动yaml1、yaml的基本语法:2、yaml支持的数据格式:3、安装4、使用5、读取方法a、目录结构b、yaml文件c、测试方法d、测试用例e、测试结果三、数据驱动excel1、安装导入2、操作3、读取方法a、目录结构b、excel文件c、测…...
OSI七层网络模型
应用层 定义了各种应用协议规范数据格式:HTTP协议、HTTPS协议、FTP协议、DNS协议、TFTP、SMTP等等。 表示层 翻译工作。提供一种公共语言、通信。 会话层 1、可以从校验点继续恢复数据进行重传。——大文件 2、自动收发,自动寻址的功能。 传输层 1、…...
易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2022年05月16日,《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文,该…...
Java 日期处理踩过的坑
前言 整理Java日期处理遇到过的问题,希望对大家有帮助 制作不易,一键三连,谢谢大家。 1.用 Calendar 设置时间的坑 反例: //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate c…...
一文吃透 Spring 中的IOC和DI(二)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
【期末指北】嵌入式系统——选择题(feat. ChatGPT)
作者|Rickyの水果摊 时间|2023年2月20日 基本信息 ☘️ 本博客摘录了一些 嵌入式系统 的 常见选择题,供有需求的同学们学习使用。 部分答案解析由 ChatGPT 生成,博主进行审核。 使用教材信息:《嵌入式系统设计与应…...
MyBatis-Plus——代码生成器(3.5.1+版本)
文章目录配置数据源配置(DataSource)全局配置(GlobalConfig)包配置(PackageConfig)策略配置(StrategyConfig)模板引擎配置(TemplateEngine)代码生成器测试样例…...
宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》
2月1日,国内网络安全行业媒体Freebuf咨询正式发布《CCSIP(China Cyber Security Panorama)2022 中国网络安全行业全景册》第五版。宁盾作为国产身份安全厂商入驻身份识别和访问管理(SSO、OTP、IDaaS)及边界访问控制&am…...
tchMaterial-parser:国家中小学智慧教育平台电子课本下载的高效解决方案
tchMaterial-parser:国家中小学智慧教育平台电子课本下载的高效解决方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本…...
3步实现微信关系检测,让社交管理效率提升80%
3步实现微信关系检测,让社交管理效率提升80% 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字社…...
MT5 Zero-Shot实战案例:跨境电商多语言商品描述中文初稿生成与改写优化
MT5 Zero-Shot实战案例:跨境电商多语言商品描述中文初稿生成与改写优化 1. 项目概述与核心价值 在跨境电商运营中,商品描述的多语言版本制作是一个耗时耗力的过程。传统方法需要先撰写中文初稿,然后逐条翻译成各种语言,不仅效率…...
数字记忆守护者:WeChatMsg让微信聊天记录成为永恒的时光胶囊
数字记忆守护者:WeChatMsg让微信聊天记录成为永恒的时光胶囊 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...
霍里思特获2亿融资,矿业分选新势力崛起?
硬氪消息,矿石AI智能分选设备企业霍里思特完成近2亿元C轮融资,由招商局资本领投。该公司技术实力强,产品优势明显,市场表现佳,未来发展值得关注。融资情况与用途霍里思特完成近2亿元C轮融资,由招商局资本领…...
Python玩转微信自动化:除了监控聊天,uiautomation还能帮你自动保存文件、整理聊天记录
Python实现微信自动化管理:从文件归档到聊天记录整理 微信已经成为现代办公不可或缺的沟通工具,但随之而来的是海量文件管理和聊天记录整理的烦恼。每天手动保存图片、文档,再按日期分类,不仅耗时耗力,还容易遗漏重要…...
python pygame实现贪食蛇
文章目录步骤2、创建snake.py,然后运行即可操作方式解读很简单的一个例子,开启小游戏制作大门。步骤 1、安装依赖 pip install pygame2、创建snake.py,然后运行即可 代码: import pygame import time import random# --- 1. 初…...
Qwen3-ForcedAligner-0.6B在法庭庭审记录自动化中的创新应用
Qwen3-ForcedAligner-0.6B在法庭庭审记录自动化中的创新应用 1. 引言 想象一下这样的场景:法庭书记员正紧张地记录着庭审过程,手指在键盘上飞快敲击,却还是跟不上律师和证人的语速。重要细节被遗漏,庭审记录不完整,甚…...
论文精读|AOrchestra:让编排器自动「按需创建」专属子智能体的 Agentic 框架
这篇论文来自 HKUST(GZ)(香港科技大学广州)和 DeepWisdom,联合 RUC、ECNU、UdeM & Mila 等多所院校,发表于 2026 年 2 月的 arXiv 预印本。论文题为 “AOrchestra: Automating Sub-Agent Creation for Agentic Orchestration”…...
课堂学习1
Miniconda 安装教程 (2026版) Anaconda 是最流行的 Python 和 R 语言数据科学平台,它包含了康达包管理器(Conda)、Python 以及 1500 个科学包及其依赖项。Miniconda 可以看作是 Anaconda 的“轻装版”,只自带 conda …...
