【小f的刷题笔记】(JS)链表 - 合并 k 个有序链表 LeetCode23 - 顺序合并暴力三种方法

news2025/1/9 1:39:38

【链表】

合并 k 个有序链表:

🌟 想办法从一堆节点中找到最小的那个节点

看了很多题解,主要是以下四种方法(优先队列我还没有写出来,先遗留着):

顺序合并
分治合并(归并)
暴力求解
优先队列


LeetCode303

链接:

23.合并 k 个升序链表

题目:

在这里插入图片描述


思路1 - 顺序合并:

-> 每次都看作合并两个有序链表,就是去遍历一遍链表数组,其余和 21.合并两个有序链表 同

代码:
var mergeKLists = function(lists) {
    let ans = null
    // 顺序去拿每个链表,两两合并,合完作为一个新数组,再跟下一个数组合并
    for(let i=0; i<lists.length; i++) {
        ans  = mergeTwoLists(ans, lists[i])
    }
    return ans
};

// 第21题合并两个数组的方法
var mergeTwoLists = function(a, b) {
    if(a == null || b == null) {
        return a != null ? a : b
    }
    const dummy = new ListNode(-1)
    let p = dummy, aPtr = a, bPtr = b
    while(aPtr != null && bPtr != null) {
        if(aPtr.val < bPtr.val) {
            p.next = aPtr
            aPtr = aPtr.next
        } else {
            p.next = bPtr
            bPtr = bPtr.next
        }
        p = p.next
    }
    p.next = aPtr!==null ? aPtr : bPtr
    return dummy.next
}

思路2 - 分治合并(归并):

-> 同思路1一样,每次都看作合并两个有序链表,但不是按顺序的两两合并,这里用到了递归,分组合并链表,比上一种方法在时间上会更快一些

代码:
var mergeKLists = function(lists) {
    return merge(lists, 0, lists.length-1)
};

// 分治思想
var merge = function(lists, l, r) {
    if(l===r) {
        return lists[l]
    }
    if(l>r) {
        return null
    }
    let mid = (l+r) >> 1
    return mergeTwoLists(merge(lists, l, mid), merge(lists, mid+1, r))
};

// 第21题合并两个数组的方法
var mergeTwoLists = function(a, b) {
    if(a == null || b == null) {
        return a != null ? a : b
    }
    const dummy = new ListNode(-1)
    let p = dummy, aPtr = a, bPtr = b
    while(aPtr != null && bPtr != null) {
        if(aPtr.val < bPtr.val) {
            p.next = aPtr
            aPtr = aPtr.next
        } else {
            p.next = bPtr
            bPtr = bPtr.next
        }
        p = p.next
    }
    p.next = aPtr!==null ? aPtr : bPtr
    return dummy.next
}

思路3 - 暴力求解:

-> 把所有链表的值拿出来放到一个数组里去,数组升序排序,再把数组的值连成一个新的链表

代码:
var mergeKLists = function(lists) {
    // 定义一个数组存储所有链表的值
    const temp = []
    if(lists.length === 0) return null
    for(let i=0; i<lists.length; i++) {
        // 去遍历每个内部数组,只要有值就push到数组中
        while(lists[i]) {
            temp.push(lists[i].val)
            lists[i] = lists[i].next  // 这个其实就相当于i++
        }
    }
    // 时刻提防空数组 二维空数组也是
    if(temp.length === 0) return null
    // 升序排序 其实括号里不写也没事 默认升序
    temp.sort((a,b) => a-b);
    // 数组排好序了 再把它们变成一个新链表
    // 还是跟之前一样 定义一个哑结点
    const muddy = new ListNode(-1)
    // p是游标
    let p = muddy
    for(let i=0; i<temp.length; i++) {
        // 依次把数组的值实例化为链表节点,赋值给p.next,然后p指针后移
        p.next = new ListNode(temp[i])
        p = p.next
    }
    return muddy.next
};

写在最后:
js知识还不大够,优先队列暂时先得遗留着
加油叭!

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

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

相关文章

【单片机】矩阵键盘/定时器

目录 一、矩阵键盘 1、矩阵按键原理 1.1工作方式 1.2工作原理 1.3单片机IO口 2、矩阵键盘数字显示代码 3、矩阵键盘密码锁 二、定时器&#xff08;工作模式1&#xff09; 1、定时器的原理 2、寄存器 2.1模式选择寄存器TMOD&#xff08;不可位寻址&#xff09; 2.2…

CentOS 搭建 WordPress 站点

博客链接:https://www.aiiyx.cn 内容纲要 1. 版本相关2. 主要内容3. 安装并配置 PHP4. 安装并配置 WordPress5. 配置 Nginx6. 配置 MySQL7. 初始化 WordPress 1. 版本相关 WordPress 版本 5.9.3PHP 版本 8.1MySQL 版本 5.7Nginx 版本 1.18 2. 主要内容 由于我的 CentOS 服务…

ChatGPT:将你的微信变成智能聊天机器人!

天天用微信的你有没有做个这样一种设想&#xff1a;让最先进的人工智能算法帮你聊天! 这机器人可以回答各种问题&#xff0c;上知天文下知地理&#xff0c;甚至还能写代码。无论是哄女朋友&#xff0c;应付老婆&#xff0c;或者勾搭陌生小姐姐&#xff0c;都能做到24小时在线&…

一文带领大家了解什么是泛型

对于泛型&#xff01;其实大家了解不是很多&#xff0c;在各大高校的学习中&#xff0c;如果你不去深入的了解泛型&#xff0c;老师只是会一水儿过&#xff0c;并不会单独去带领大家了解&#xff01;&#xff01;那么&#xff0c;笔者结合自身的学习泛型的想法&#xff0c;结合…

2022年双十二拼多多百亿补贴有活动吗?如何领红包?

2022年双十二拼多多百亿补贴有活动吗?如何领红包? 拼多多的活动大家都很清楚&#xff0c;平常没有活动的时候&#xff0c;价格也是比较实惠的&#xff0c;除了拼团购物之外&#xff0c;拼多多还有百亿补贴&#xff0c;所以商品比其他平台都要便宜&#xff0c;双十二拼多多百亿…

物理数据库服务器扫描hba卡识别共享磁盘命令

1、问题背景 默认情况&#xff0c;在扩容完1套物理rac共享存储后&#xff0c;rac主机是不能识别共享存储的。那么该怎么办呢&#xff1f; 2、解决办法 例如&#xff0c;在扩容完1套物理rac共享存储后&#xff0c;如果rac主机不能识别共享存储的话(一般需要执行命令后&#x…

Jboss弱口令Getshell

文章目录漏洞简介影响版本环境搭建漏洞复现漏洞简介 JBoss Administration Console存在默认账号密码admin/vulhub&#xff0c;如果Administration Console可以登录&#xff0c;就可以在后台部署war包getshell 影响版本 Jboss4.x及其之前的版本 console 管理路径为/jmx-consol…

day16【代码随想录】反转字符串、反转字符串中的元音字母、反转字符串||、反转字符串中的单词|||、替换空格、翻转字符串中的单词、左旋转字符串

文章目录一、反转字符串&#xff08;力扣344&#xff09;二、反转字符串中的元音字母&#xff08;力扣345&#xff09;三、反转字符串 II&#xff08;力扣541&#xff09;四、反转字符串中的单词 III&#xff08;力扣557&#xff09;五、替换空格&#xff08;剑指 Offer 05&…

Kubernetes ~ k8s 从入门到入坑。

Kubernetes ~ k8s 从入门到入坑。 文章目录Kubernetes ~ k8s 从入门到入坑。1. Kubernetes 介绍。1.1 应用部署方式演变。1.2 kubernetes 简介。1.3 kubernetes 组件。1.4 kubernetes 概念。2. kubernetes 集群环境搭建。2.1 前置知识点。2.2 kubeadm 部署方式介绍。2.3 安装要…

人工智能前沿——玩转OpenAI聊天机器人ChatGPT(免费中文版)

目录 2022 地表最强AI聊天机器人ChatGPT诞生&#xff01;&#xff01;&#xff01; 一、前言 &#x1f384;&#x1f388; ChatGPT是OpenAI开发的一个大型预训练语言模型。它是GPT-3模型的变体&#xff0c;GPT-3经过训练&#xff0c;可以在对话中生成类似人类的文本响应。Cha…

Vite + Vue3 项目中,使用 vw/vh 适配移动端,并通过 Android Studio 打包

目录 1. 使用 vw/vh 适配移动端 1.1 使用 vite 初始化项目 1.2 安装插件&#xff0c;将 px 转化成 vw 1.2.1 在 vite.config.ts 中&#xff0c;声明插件 1.2.2 手写 postcss 类型声明文件&#xff0c;解决 路径爆红、没有提示 1.2.3 tsconfig.config.json VS tsconfig.js…

Java 8 Stream 之 collect() 的奇技淫巧!

前言 本身我是一个比较偏向少使用Stream的人&#xff0c;因为调试比较不方便。 但是, 不得不说&#xff0c;stream确实会给我们编码带来便捷。 所以还是忍不住想分享一些奇技淫巧。 正文 Stream流 其实操作分三大块 &#xff1a; 创建 处理 收集 我今天想分享的是 收集…

核心内参:S参数的三个重要特性——因果性、无源性与互异性

1 从一个报错开始 S参数在射频、高速领域的应用非常广泛&#xff0c;相关知识点也非常多。最近浏览了一本2020年新出版的书《S Parameter for Signal Integrity》&#xff0c;作者是IEEE Fellow、业界大牛Peter J. Pupalaikis&#xff0c;现任职于Teledyne LeCroy。该书写的非…

《Linux运维实战:使用Percona Backup for MongoDB备份与恢复Mongodb数据》

一、备份与恢复方案 Percona Backup for MongoDB 是一个开源、分布式和低影响的解决方案&#xff0c;用于MongoDB分片集群和副本集的一致备份。从版本1.7.0开始&#xff0c;Percona Backup for MongoDB支持物理和逻辑备份和恢复&#xff0c;仅支持对逻辑备份进行时间点恢复。 …

linux支持ipv6

1. kernel config [*] Networking support ---> Networking options ---> <*> The IPv6 protocol ---> 2. test 2.1 /proc/net/if_inet6 查看/proc/net/if_inet6文件是否存在以确定你的系统是否支持IPv6。 如果没有&#xff0c;可尝试如下命令加载IPv6模…

磺化氰化物7酪胺Sulfo-Cy7 TSA,Sulfo-Cyanine7 TSA,Sulfo-Cyanine7 Tyramide

Sulfo-Cyanine7 Tyramide&#xff0c;Sulfo-Cy7 TSA&#xff0c;Sulfo-Cyanine7 TSA&#xff0c;磺酸基-花青素Cy7 酪酰胺产品结构&#xff1a; 产品规格&#xff1a; 1.Packaging specification&#xff1a;5mg, 10mg, 25mg, flexible packaging, including 100mg packaging a…

11.AOP之注解配置

1.使用IDEA创建工程 2.引入项目使用的依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency><depend…

一、计算机网络体系结构(一)计算机网络概述

目录 1.1计算机网络的概念、组成与功能 1.2计算机网络的分类 1.2.1按分布范围分类 1.2.2按传输技术分类 1.2.3按拓扑结构分类 1.2.4按使用者分类 1.2.5按交换技术分类 1.2.6按传输介质分类 1.3计算机网络的主要性能指标 1.1计算机网络的概念、组成与功能 计算机网络的…

PHP单商户视频号对接流程

一、序关联至对应视频号&#xff0c;并在视频号带货直播中使用。 首先&#xff0c;商家需要在微信后台申请自定义版交易组件权限&#xff0c;申请成功后&#xff0c;可以将小程 二、申请开通商户号 等商户号审核之后在操作一下步骤接口调用&#xff08;pro为例&#xff09; 实…

k8s ~ 数据存储、安全认证、DashBoard。

k8s ~ 数据存储。 文章目录k8s ~ 数据存储。8.1 基本存储。8.1.1 EmptyDir。8.1.2 HostPath。8.1.3 NFS。8.2 高级存储。8.2.1 PV。8.2.2 PVC。8.2.3 生命周期。8.3 配置存储。8.3.1 ConfigMap。8.3.2 Secret。9. 安全认证。9.1 访问控制概述。9.2 认证管理9.3 授权管理。9.4 准…