Leetcode-每日一题【725.分隔链表】

news2024/11/18 2:42:38

题目

给你一个头结点为 head 的单链表和一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。这 k 个部分应该按照在链表中出现的顺序排列,并且排在前面的部分的长度应该大于或等于排在后面的长度。返回一个由上述 k 部分组成的数组。


 
示例 1:

输入:head = [1,2,3], k = 5
输出:[[1],[2],[3],[],[]]
解释:
第一个元素 output[0] 为 output[0].val = 1 ,output[0].next = null 。
最后一个元素 output[4] 为 null ,但它作为 ListNode 的字符串表示是 [] 。 

示例 2:

 

 

输入:head = [1,2,3,4,5,6,7,8,9,10], k = 3
输出:[[1,2,3,4],[5,6,7],[8,9,10]]
解释:
输入被分成了几个连续的部分,并且每部分的长度相差不超过 1 。前面部分的长度大于等于后面部分的长度。

提示:

  • 链表中节点的数目在范围 [0, 1000]
  • 0 <= Node.val <= 1000
  • 1 <= k <= 50

解题思路

1.我们先对链表进行遍历,并获取链表长度len

2.我们用 len 对 k 进行取余 得到每组的元素个数temp,因为我们不能确定head 可以整除k ,所以我们再用 len 除以 k 得到余数,再将余数分配到我们已经分好的组中(举个例子: 11 / 3 = 3 余 2: 一共有3段,每段平均3个节点,但是剩下了2个节点,剩下的2个节点不能丢,得全部塞到子链表里面去,怎么塞呢?根据题意长的链表排前面,短的链表排后面,所以只有前面的两个子链表一人分担一个多余的节点,如此一来便形成了 4 4 3 的结构。)

3.分好组后我们设置一个哨兵结点 pre 再次对链表进行遍历,将链表截取为我们所划分好的长度。

代码实现

class Solution {
    public ListNode[] splitListToParts(ListNode head, int k) {
        ListNode cur = head;
        int len = 0;
        while(cur != null){
            len++;
            cur = cur.next;
        }
        int num = len / k;
        int temp =  len % k;
        ListNode[] result = new ListNode[k];
        ListNode pre = head;
        for(int i = 0; i < k && pre != null; i++){
            result[i] = pre;
            int templen = num +  (i < temp ? 1 : 0);
            for(int j = 1; j < templen; j++){
                pre = pre.next;
            }
            ListNode preNext = pre.next;
            pre.next = null;
            pre = preNext;
        }
        return result;
    }
}

测试结果

 

 

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

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

相关文章

在 JavaScript 中获取选中或突出显示的文本

本文将展示我们如何使用 DOM API 来让用户在屏幕上突出显示或选择文本。 DOM API 为我们提供了 getSelection() 方法&#xff0c;该方法允许我们获取用户选择的文本。 窗口对象可以直接访问这个方法。 让我们看看如何实际实现此功能。 使用 JavaScript 中的 window.getSelecti…

Vscode快速对比两个文件的不同部分

文件对比第一种方法&#xff1a; 打开vscode&#xff0c;打开文件或者文件夹 选中需要对比的文件 按住ctrl选择要对比的另一个文件&#xff0c;鼠标右键选择将已选项进行比较 结果如下&#xff1a; 文件对比第二种方法&#xff1a; 打开文件&#xff0c;点击鼠标右键 命…

牛客网论坛考研计算机组成原理笔记,GitHub已下载量已过百万

**前言&#xff1a;**看过很多书&#xff0c;但总是忘得很快。知识广度越大越容易接纳新东西&#xff0c;但从考察角度来说&#xff0c;自然是对某个方面了解越深越好。那些大而全的著作虽然每本都是经典中的经典&#xff0c;但实际工作中可能只用到其中的一小部分。我现在越发…

机器学习13: 使用 TensorFlow 进行二元分类(Binary Classification)编程实践

在【机器学习6】和【机器学习9】中&#xff0c;我们使用 TensorFlow 进行了“线性回归模型”和“组合特征”编程实践。本质上&#xff0c;其中采用的都是回归模型&#xff0c;也就是说&#xff0c;我们创建了产生浮点预测的模型&#xff0c;比如“这个社区的房子要花 N 千美元。…

基于matlab深度学习的多光谱图像语义分割(附源码)

一、前言 此示例演示如何使用 U-Net 对具有七个通道的多光谱图像执行语义分割。 语义分割涉及用类标记图像中的每个像素。语义分割的一个应用是跟踪森林砍伐&#xff0c;即森林覆盖率随时间的变化。环境机构跟踪森林砍伐&#xff0c;以评估和量化一个地区的环境和生态健康状况…

Flink消费kafka出现空指针异常

文章目录 出现场景&#xff1a;表现&#xff1a;问题&#xff1a;解决&#xff1a; tombstone : Kafka中提供了一个墓碑消息&#xff08;tombstone&#xff09;的概念&#xff0c;如果一条消息的key不为null&#xff0c;但是其value为null&#xff0c;那么此消息就是墓碑消息. …

echarts tooltip自定义线条样式及数据提示框内容

option {......tooltip: {trigger: axis,borderWidth: 0, // 去除数据提示框默认的边框axisPointer: {lineStyle: { // 设置hover时竖线样式color: {type: linear,x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: rgba(128,200,244,0) // 0% 处的颜色},{offset: 1,colo…

【40000字】!最适合新手的Springboot+Vue项目

更多文章&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg2NDY3NjY5NA&actiongetalbum&album_id2053253027934863360#wechat_redirect hello我是索奇&#xff0c;本套项目对应bilibili视频&#xff0c;大家可以结合视频看哈&#xff0c;有些基础的只看…

2022年系统架构师论文(回忆版)

2022年11月6日&#xff0c;全国计算机等级下半年考试&#xff0c;在疫情压力下如期举行。 北京市软件架构师考试地点在北京市工贸技师学院&#xff08;机电分院&#xff09;&#xff0c;地址&#xff1a;海淀区北四环北路132号&#xff08;金泰海博大酒店北侧&#xff09; 查看…

网络安全(黑客)自学笔记

建议一&#xff1a;黑客七个等级 黑客&#xff0c;对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域&#xff0c;越深入越敬畏&#xff0c;知识如海洋&#xff0c;黑客也存在一些等级&#xff0c;参考知道创宇 CEO ic&#xff08;世界顶级黑客团队 0x557 成员…

chatgpt赋能python:吐血推荐的Python编程好玩的代码

吐血推荐的Python编程好玩的代码 近年来&#xff0c;Python 成为了全球最受欢迎的编程语言之一。Python 的简洁明了&#xff0c;易学易用&#xff0c;使得越来越多的开发者选择了 Python。Python 的生态系统非常丰富&#xff0c;有很多丰富有趣的库和代码可以供我们玩耍。在本…

使用MySQL根据原型字段创建表结构

⭐️ 不爱生姜不吃醋&#xff0c;原创不易&#xff0c;转载请注明原链接 ❗️ 注&#xff1a;本文写的是基于MySQL对数据库表结构进行的操作(DDL) 文章目录 一、数据库1.基本概念2.关系型数据库&#xff08;RDBMS&#xff09;3.数据模型4.SQL通用语法5.SQL分类 二.创建表结构1.…

关于nlohmann::json的简单使用

nlohmann::json的使用非常简单&#xff0c;只需要包含.hpp文件即可&#xff0c;这是它的官网https://github.com/nlohmann/json 简单使用&#xff1a; #include "json.hpp" #include <iostream>using Info nlohmann::json;int main() {Info info;std::cout &…

Java面试Day11

1. MySQL 事务有哪些隔离级别、分别有什么特点&#xff0c;以及 MySQL 的默认隔离级别是什么&#xff1f; 在MySQL中事务的隔离级别是为了解决常见的并发问题&#xff0c;在保证数据库性能的同时保持事务的隔离性&#xff0c;常见的并发问题有&#xff1a; 脏读&#xff1a;如果…

利用nginx/apache代理wss 实现 小程序 端口 反向代理

除了用Workerman自身的SSL&#xff0c;也可以利用nginx/apache作为wss代理转发给workerman 我就是栽在这大坑里&#xff08;nginx/apache代理wss&#xff0c;workerman部分就不要设置ssl&#xff0c;否则将无法连接&#xff0c;两个方法2选1&#xff09;官方推荐用nginx/apach…

基于matlab基于预训练的膨胀双流卷积神经网络的视频分类器执行活动识别(附源码)

一、前言 此示例首先展示了如何使用基于预训练的膨胀 3-D &#xff08;I3D&#xff09; 双流卷积神经网络的视频分类器执行活动识别&#xff0c;然后展示了如何使用迁移学习来训练此类视频分类器使用 RGB 和来自视频的光流数据 [1]。 基于视觉的活动识别涉及使用一组视频帧预…

数据结构07:查找[C++][红黑二叉排序树RBT]

图源&#xff1a;文心一言 | 提词&#xff1a;动漫风格 红黑树 少女#创意图# 考研笔记整理1.7w字&#xff0c;但是删除操作的代码是有一点问题的{无法正确处理红色结点的删除}&#xff0c;其它功能可正常使用&#xff0c;请小伙伴注意~~&#x1f95d;&#x1f95d; 第1版&…

【线程池】线程池的ctl属性详解

目录 一、ctl介绍 二、线程池ctl源码 三、线程池ctl分析 1、private static int ctlOf(int rs, int wc) { return rs | wc; } 2、private final AtomicInteger ctl new AtomicInteger(ctlOf(RUNNING, 0)); 3、private static int runStateOf(int c) { return c &am…

TensorFlow框架

TensorFlow框架 本文目录&#xff1a; 一、通过代码了解TensorFlow结构 1.1、TensorFlow实现一个加法运算代码 1.1.1、原生python加法运算 1.1.2、TensorFlow实现加法运算 1.1.3、TensorFlow实现加法运算 1.2、TensorFlow的Hello World 二、TensorFlow架构图 三、Tenso…

WebRTC Docker容器部署方案

文章目录 WebRTC简介WebRTC Docker容器部署优势方案&#xff08;mpromonet/webrtc-streamer&#xff09;步骤 WebRTC简介 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种开放的实时通信技术&#xff0c;它允许浏览器之间进行音频、视频和数据的实时传输。W…