算法——链表(二)

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 小比特 大梦想

此篇文章与大家分享链表专题的第二篇,大部分知识在第一篇中已经呈现
对于归并排序在我个人主页专栏 <排序> 有详细的介绍
如果有不足的或者错误的请您指出!

4.合并K个升序链表

题目:合并k个升序链表

4.1解析

如果是合并两个升序列表,那么我们肯定都是不陌生的
但是这道题要我们做的是合并k个,那么我们就可以两个两个合并,将合并完的再和第三条合并,因此我们最容易想到的暴力解法就是简单的两两排序形成新链表,再与第三链表进行再次排序,但是时间复杂度太高了,达到O(n*k^2),我们有两种优化方法

4.1.1利用优先级进行优化

我们之前在合并两个有序链表的时候,是用两个变量分别遍历两个链表,每次将二者中最小的那一个插入到新链表中
那么我们合并k个其实也是如此,每次比较出k个节点中较小的那一个
那么问题就是这么比较k个节点呢?? 我们可以利用优先级队列,建立小根堆,那么最小的元素一定是堆顶元素,这样每次将堆顶元素插入新链表即可.此时时间复杂度就降到O(n k logk)

优化1题解
class Solution {public ListNode mergeKLists(ListNode[] lists) {PriorityQueue<ListNode> queue = new PriorityQueue<>((o1, o2) -> o1.val - o2.val);for(ListNode node : lists){if(node != null){queue.offer(node);}}ListNode newHead = new ListNode(0);ListNode cur = newHead;while(!queue.isEmpty()){ListNode tmp = queue.peek();cur.next = queue.poll();cur = cur.next;if(tmp.next != null){queue.offer(tmp.next);}}return newHead.next;}
}

4.1.2归并排序进行优化

我们之前说过,两两合并我们是熟悉的,而归并排序恰好就是两两进行排序,那么我们就可以直接利用归并排序,再合并的过程中对两个链表进行合并,时间复杂度同样为O(n k logk)

优化2题解
    public ListNode mergeKLists(ListNode[] lists) {ListNode ret =  merge(lists, 0, lists.length-1);return ret;}private ListNode merge(ListNode[] lists,int left,int right){if(left >  right){return null;}if(left == right){return lists[left];}int mid = left + (right - left) / 2;ListNode l1 = merge(lists,left,mid);ListNode l2 = merge(lists,mid+1,right);return mergeTwoList(l1,l2);}private ListNode mergeTwoList(ListNode l1,ListNode l2){if(l1 == null){return l2;}if(l2 == null){return l1;}ListNode cur1 = l1;ListNode cur2 = l2;ListNode newHead = new ListNode(0);ListNode cur = newHead;while(cur1 != null && cur2 != null){if(cur1.val > cur2.val){cur.next = cur2;cur2 = cur2.next;}else{cur.next = cur1;cur1 = cur1.next;}cur = cur.next;} while(cur1 != null){cur.next = cur1;cur1 = cur1.next;cur = cur.next;}while(cur2 != null){cur.next = cur2;cur2 = cur2.next;cur = cur.next;}return newHead.next;}

5.k个一组翻转链表

题目:k个一组翻转链表

5.1解析

思路比较明确,首先需要求出你需要翻转多少对.因为题目要求不够k个节点的不翻转
接着对这几对进行翻转即可
有一点细节问题就是:
在这里插入图片描述
我们是引入"虚拟头结点",每次用cur遍历k个节点,将k个节点依次翻转插入newHead后面,因此我们针对每一组进行翻转的时候,都要有一个newHead,这个newHead就是我们要翻转的这一组的前一个节点;第一组的newHead就是我们引入的newHead,而后面的实际上就是上一组的第一个节点(因为翻转后他就是这一组的最后一个节点)

5.2题解

class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode cur = head;int n = 0;while(cur != null){n++;cur = cur.next;}n /= k;ListNode newHead = new ListNode(0,head);ListNode prev = newHead;cur = head;for(int i = 0; i < n; i++){ListNode tmp = cur;for(int j = 0; j < k; j++){ListNode t = cur.next;cur.next = prev.next;prev.next = cur;cur = t;}prev = tmp;}prev.next = cur;//将后面不需要翻转的插到后面去return newHead.next;}
}

感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 小比特 大梦想

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

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

相关文章

蓝桥杯嵌入式(G431)备赛笔记——DMA+UART

目录 CubeMX配置&#xff1a; 代码配置: DMA通道接收&#xff1a; DMA通道发送&#xff1a; 注意&#xff1a; 主函数中记得开启串口接收回调函数&#xff1a; 加了DMA的UART接收通道和一般的区别&#xff1a; 加了DMA的UART发送和一般的区别&#xff1a; CubeMX配置&…

贪心算法|53.最大子序和

力扣题目链接 class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) {result count;}if (count < 0) count 0;}return result;} …

1.Godot引擎|场景|节点|GDS|介绍

Godot介绍 Godot是一款游戏引擎 可以通过在steam商城免费下载 初学者和编程基础稍差的推荐学习使用GDScript&#xff0c;和python有些相似 Godot节点 Godot的开发思想——围绕节点 节点的特征与优势 最常用基本的开发组件大部分都具有具体的功能&#xff0c;如图片&#xf…

关于ansible的模块 ⑤

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 继《关于Ansible的模块 ①》、《关于Ansible的模块 ②》、《关于Ansible的模块 ③》与《关于Ansible的模块 ④》之后&#xff0c…

MySQL主从的介绍与应用

mysql主从 文章目录 mysql主从1. 主从简介1.1 主从作用1.2 主从形式 2. 主从复制原理3. 主从复制配置3.1 mysql安装&#xff08;两台主机安装一致&#xff0c;下面只演示一台主机操作&#xff09;3.2 mysql主从配置3.2.1 确保从数据库与主数据库里的数据一样3.2.2 在主数据库里…

【C语言】双向链表详解

文章目录 关于双向链表双向链表的初始化双向链表的打印双向链表方法调用 - 尾删为例双向链表的查找 - 指定位置之后插入为例双向链表结束 - 链表的销毁小结及整体代码实现 关于双向链表 首先链表有8种基本分法 其中在笔者之前文章种详细介绍的 单链表 是不带头单项不循环链表…

【饿了么笔试题汇总】[全网首发]2024-04-12-饿了么春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新饿了么近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x…

MySQL视图的语法以及限制

语法 创建&#xff1a;create view view_name as select 语句; mysql能够通过创建视图的方式来创建一个虚拟表&#xff0c;它内容由select 语句决定。 并且创建的视图的变化会影响到主表&#xff0c;主表的变化也会影响视图。 删除: drop view view_name; 其实我们能够发现&am…

2023全国青少年信息素养大赛总决赛C++小学组真题

2023 全国青少年信息素养大赛总决赛C小学组真题 第一题 给定一个五位数x&#xff0c;你需要重复做以下操作: 把数的各个数位进行由大到小排序和由小到大排序&#xff0c;得到的最大值和最小值&#xff0c;进行求差后作为新的x。 可以证明&#xff0c;在经过有限次操作后&…

mybatis05:复杂查询:(多对一,一对多)

mybatis05&#xff1a;复杂查询&#xff1a;&#xff08;多对一&#xff0c;一对多&#xff09; 文章目录 mybatis05&#xff1a;复杂查询&#xff1a;&#xff08;多对一&#xff0c;一对多&#xff09;前言&#xff1a;多对一 &#xff1a; 关联 &#xff1a; 使用associatio…

GPT-5将在6月发布前进行「红队进攻测试」

“GPT-5将在6月发布”的消息刷屏了AI朋友圈。这则消息之所以被无数人相信并转发&#xff0c;是因为已经有不少技术人员在社交平台上晒出了「红队进攻测试」邀请。 基于 GPT系列庞大的用户体量和影响力&#xff0c;OpenAI 将更加重视GPT-5 的安全性&#xff0c;作为GPT-5上市前的…

DVWA靶场的下载与搭建

目录 什么是靶场 DVWA靶场下载 下载地址 安装 什么是靶场 靶场就是人为提供的带有安全漏洞的服务&#xff0c;每一个学习者都可以在本地快速搭建来实操&#xff0c;回溯漏洞的发生原理以及操作方式。DVWA靶场呢就是一个可以通过浏览器访问的拥有可视化页面的web靶场。 DVW…

前端图片详解(最全面、最新)

前言 当我们在做前端性能优化的时候&#xff0c;总是会离不开图片&#xff0c;尤其在首次内容绘制&#xff08;FCP&#xff09;和最大内容绘制 (LCP)中&#xff0c;图片显得格外关键&#xff0c;而我发现关于图片格式的文章&#xff0c;一般不全&#xff0c;或者是偏旧。 所以…

Bitmap OOM

老机器Bitmap预读仍然OOM&#xff0c;无奈增加一段&#xff0c;终于不崩溃了。 if (Build.VERSION.SDK_INT < 21)size 2; 完整代码&#xff1a; Bitmap bitmap; try {//Log.e(Thread.currentThread().getStackTrace()[2] "", surl);URL url new URL(surl);…

数据结构--链式栈

一.链式栈的栈顶在哪里? 二.链栈的结构: typedef struct LSNode{ int data; struct LSNode* next; }LSNode ,*PLStack; //链栈的节点.由于栈顶在第一个数据节点,所以不需要top指针 三.链式栈的实现: //初始化LSNode* p (LSNode*)malloc(sizeof(LSNode));assert(p ! NULL)…

Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066

很奇怪的问题,在使用nifi的时候碰到的,这里是用NIFI,把数据从postgresql中同步到mysql中, 首先postgresql中的源表,中是没有create_time这个字段的,但是同步的过程中报错了. 报错的内容是说,目标表中有个create_time字段,这个字段是必填的,但是传过来的flowfile文件中,的数据没…

Kali中间人攻击

中间人攻击 中间人攻击&#xff08;Man-in-the-Middle Attack&#xff0c;简称MITM&#xff09;是一种网络安全攻击&#xff0c;其中攻击者插入自己&#xff08;作为“中间人”&#xff09;在通信的两个端点之间&#xff0c;以窃取或篡改通过的数据。攻击者可以监视通信&#x…

Composer 安装与使用

文章目录 Composer的主要特点&#xff1a;Composer 的安装Windows 平台Linux 平台Mac OS 系统 Composer 的使用require 命令update 命令remove 命令search 命令show 命令 基本约束精确版本范围通配符波浪号 ~折音号 ^ 版本稳定性 Composer 是PHP编程语言的一个依赖管理工具。它…

【R语言从0到精通】-3-R统计分析(列联表、独立性检验、相关性检验、t检验)

上两次教程集中学习了R语言的基本知识&#xff0c;那么我们很多时候使用R语言是进行统计分析&#xff0c;因此对于生物信息学和统计科学来说&#xff0c;R语言提供了简单优雅的方式进行统计分析。教程参考《Rlearning》 3.1 描述性统计分析 3.1.1 载入数据集及summary函数 我…

广州南沙番禺联想SR530服务器主板传感器故障维修

今日分享一例广州市南沙区联想ThinkSystem SR530服务器sensor sysbrd vol故障问题维修案例&#xff1b; 服务器型号是&#xff1a;Lenovo thinksystem sr530 g6服务器 服务器所在位置&#xff1a;广东省广州市南沙区 服务器故障问题&#xff1a;机房异常停电&#xff0c;来电后…