【数据结构与算法 | 灵神题单 | 分治(链表)篇】力扣148

news2024/11/13 21:26:09

1. 力扣148:排序链表

1.1 题目:

给你链表的头结点 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 = []
输出:[]

提示:

  • 链表中节点的数目在范围 [0, 5 * 104] 内
  • -105 <= Node.val <= 105

进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?

1.2 思路:

使用堆,每次取出来的数就是最小的。但进阶是想让我们用分治来解决链表的排序问题。

1.3 题解:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode sortList(ListNode head) {
        // 优先队列
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        ListNode p = head;
        while(p != null){
            pq.offer(p.val);
            p = p.next;
        }
        ListNode dummy = new ListNode(-1, null);
        p = head;
        while(!pq.isEmpty()){
            p.val = pq.poll();
            p = p.next;

        }
        return head;
    }
}

2. 力扣23:合并K个升序链表

2.1 题目:

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2:

输入:lists = []
输出:[]

示例 3:

输入:lists = [[]]
输出:[]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] 按 升序 排列
  • lists[i].length 的总和不超过 10^4

2.2 思路:

2.3 题解:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        if (lists == null || lists.length == 0) {
            return null;
        }
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for (int i = 0; i < lists.length; i++) {
            ListNode p = lists[i];
            ListNode q = p;
            while(q != null) {
                pq.offer(q.val);
                q = q.next;
            }
        }
        ListNode dummy = new ListNode(0);
        ListNode q = dummy;
        while (! pq.isEmpty()) {
            ListNode p = new ListNode(pq.poll());
            q.next = p;
            p.next = null;
            q = p;
        }
        return dummy.next;
    }
}

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

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

相关文章

【C++算法】二分查找

二分查找 题目链接 二分查找https://leetcode.cn/problems/binary-search/ 算法原理 代码步骤 代码展示 class Solution { public:int search(vector<int>& nums, int target) {int left 0, right nums.size() - 1;while(left < right){// 防止溢出int mid …

AI周报(9.8-9.14)

AI应用-NEKO Health用AI颠覆体检 Neko Health 由 Spotify 创始人丹尼尔埃克和哈亚尔马尔尼尔森共同创立&#xff0c;致力于通过每年的全身扫描和由 AI 驱动的洞察力来改善预防性医疗保健&#xff0c;能够检测诸如心脏病和皮肤癌等疾病。 该公司通过使用人工智能软件支持的全身…

Docker:对已有的容器,对当前容器映射的端口实时 (增删改查)

首先我的docker已经起了一个容器&#xff0c;我突然想把他的80->80映射的端口改成80->8080 但是我不想去新启动容器&#xff0c;想在现有容器基础上去修改&#xff0c;或者我想删除某个端口映射&#xff08;只是大概思路&#xff09; 如何寻找容器配置文件位置 首先我这…

【运维平台】WGCLOUD是如何判定主机下线的

只要被控主机的agent超过5分钟没有上报监测数据&#xff0c;系统就会判定该主机下线 这里的5分钟是默认的判定时间&#xff0c;如果agent上报时间是1分钟&#xff0c;那么agent超过1分钟没有上报数据&#xff0c;就会判定下线

优化IDEA卡顿,提示慢的问题,亲测有效!

1、优化JVM的参数 以下文件在idea安装目录的idea64.exe.vmoptions文件中。 一般来说我们只需要调整-Xms、-Xmx、-XX:ReservedCodeCacheSize三个即可&#xff0c;根据电脑的实际内存去调&#xff0c;我的电脑是48G内存&#xff0c;调到了 -Xms4096m (堆初始内存大小) -Xmx8192m…

多线程学习篇二:Thread常见方法

1. 常见方法 方法名 static 功能说明 注意点 start() 启动一个新线程&#xff0c;在新线程里面运行run方法 start 方法只是让线程进入就绪&#xff0c;里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的 start 方法只能调用一次&#xff0c;如果调用了多…

man命令详解

一、man命令简介&#xff1a; man是manual的缩写。操作手册之意。 本地的帮助文档称为man pages&#xff0c;这些操作手册随着软件安装而安装到本地&#xff0c;可以使用man命令进行查询。 随着软件包的安装有些操作手册会以文档的方式放在/usr/share/doc目录当中。…

初识HTTP

1、请求头中存储的是该请求的一些主要说明 accept:浏览器通过这个头告诉服务器&#xff0c;它所支持的数据类型 Accept-Charset:浏览器通过这个头告诉服务器&#xff0c;它支持哪种字符集 Accept-Encoding:浏览器通过这个头告诉服务器&#xff0c;支持的压缩格式 Accept-Lan…

微信这些危险设置一定要关!

你有仔细研究你的微信吗&#xff1f; 用了这么久的微信&#xff0c;才知道 有这么几个设置需要及时关闭&#xff01; 逐个操作更安心1️⃣取消不常用的免密支付和自动续费 我>服务>钱包>底部 支付设置>免密支付/自动续费2️⃣取消对附近陌生人授权位置 2️⃣取消对…

2024最新最全:SQL注入漏洞原理及利用方式

1.SQL注入 原理&#xff1a; 在数据交互中&#xff0c;前端的数据传入到后台处理时&#xff0c;由于后端没有做严格的判断&#xff0c;导致其传入的恶意“数据”拼接到SQL语句中后&#xff0c;被当作SQL语句的一部分执行。漏洞产生于脚本&#xff0c;注入是针对数据库进行。 …

卷轴模式系统中的任务起源探索与趣味性设计策略分析

卷轴模式系统中的“卷轴任务”是一种通过用户参与特定任务来获得奖励的机制&#xff0c;旨在增加用户的参与度和活跃度。下面我们将分析卷轴任务的起源和发展&#xff0c;以及如何通过趣味性设计来提升用户体验。 一、卷轴任务的起源与发展 1. 起源 卷轴任务的概念最早可以追…

​2024年最新python教程全套,现在分享给大家(python全栈)

加V备注&#xff1a;“教程”领取python零基础入门教程以及1节免费公开课 全套学习资料内容分享&#xff1a; 一、Python全面学习方向路线 该内容详细整理了所有Python学习中常用到的技术点&#xff0c;汇总了各个领域的知识点&#xff0c;你可以用它来精准的寻找到对应的学…

springboot阿尔茨海默病预防网站-计算机毕业设计源码77742

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2网站分析 2.1 可行性分析 2.2 网站流程分析 2.2.1网站开发流程 2.2.2 用户登录流程 2.2.3 网站操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 网站功能分析 …

一个开源的大语言模型(LLM)服务工具,支持Llama 3.1、Phi 3、Mistral、Gemma 2 等, 87.4k star你必须拥有(附源码)

这一年来&#xff0c;AI 发展的越来越快&#xff0c;大模型使用的门槛也越来越低&#xff0c;每个人都可以在自己的本地运行大模型。之前也给大家介绍过一些可以在本地运行大模型的项目&#xff0c;今天再给大家介绍一个最厉害的开源大模型服务框架——ollama。 项目介绍 Oll…

移动硬盘无法读取?别慌!这些方法助你恢复数据!

在我们的日常工作和生活中&#xff0c;移动硬盘作为重要的数据存储工具&#xff0c;承载着珍贵资料。然而&#xff0c;移动硬盘无法被电脑读取的情况时有发生&#xff0c;令人焦急。别慌&#xff0c;下面为大家详细介绍恢复移动硬盘数据的有效方法。 一、检查硬件连接和驱动问题…

gevent- monkey 补丁

协程gevent模块的使用_gevent.spawn-CSDN博客 阅读上面的博客&#xff0c;就可以理解 gevent.monkey 的作用&#xff0c;就是自动将socket、time等标准库替换成异步的库&#xff0c;是gevent让代码从同步变成异步的一种方式 现在来一段上面博客的代码 import gevent# 函数1 …

基于华为云服务器的网页部署

这仅仅是对自己使用过程中部分记录。后续有时间我会把从服务器租用到网页部署的全过程都整理下。 1. 华为云服务器的租用 可以前往华为云租弹性云服务器&#xff0c;具体配置可以看自己的需求&#xff0c;链接在这&#xff0c;我这边选择了ubuntu18.04版本的系统。   租用成…

春之学习体验:SpringBoot教育平台开发

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线视频教育平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线视频教育平台&#xff0c;它彻底改变了过…

bestphp‘s revenge1

进入这个页面又是令人激动的代码审计环节. 不过再次之前呢先补充一些弥足珍贵的知识点. 前置知识点&#xff1a; call_user_func() call_user_func() 是 PHP 中的一个非常有用的函数&#xff0c;它允许你调用一个回调函数。回调函数可以是一个匿名函数&#xff08;也称为闭…

C#实现串口中继

前一段时间为了测试硬件产品&#xff0c;发现&#xff0c;串口转发不太方便&#xff0c;于是自己写了一个简单的串口中继小程序&#xff0c;是基于C#开发的&#xff0c;可以将两个串口互通&#xff0c;方便自己在程序的使用&#xff0c;目前看起来应用还可以&#xff0c;现在把…