(链表专题) 725. 分隔链表 ——【Leetcode每日一题】

news2024/11/9 10:07:58

725. 分隔链表

给你一个头结点为 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

思路:(数学常识)

  • 首先要知道链表的长度,即链表中一共有多少个结点 num
  • 然后根据要分隔成k个部分,计算每个部分最少分多少个len
  • 然后把多余的分给前mod个部分,每个部分分一个。

代码:(Java、C++)

Java

/**
 * 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[] splitListToParts(ListNode head, int k) {
        int num = 0;
        ListNode tem = head;
        while(tem != null){
            num++;
            tem = tem.next;
        }
        int len = num / k;
        int mod = num % k;
        ListNode[] ans = new ListNode[k];
        ListNode h = head;//保存分割后的头节点
        for(int i = 1; i <= num; i++){
            if(mod > 0 && i % (len + 1) == 0){
                tem = head.next;
                head.next = null;
                ans[(i - 1) / (len + 1)] = h;
                head = tem;
                h = head;
                mod--;
            }else if(mod < 1 && (i - num % k) % len == 0){
                tem = head.next;
                head.next = null;
                ans[(i - num % k - 1) / len] = h;
                head = tem;
                h = head;
            }else{
                head = head.next;
            }
        }
        return ans;
    }
}

C++

/**
 * Definition for singly-linked list.
 * 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:
    vector<ListNode*> splitListToParts(ListNode* head, int k) {
        int num = 0;
        ListNode* tem = head;
        while(tem != NULL){
            num++;
            tem = tem->next;
        }
        int len = num / k;
        int mod = num % k;
        vector<ListNode*> ans;
        ListNode* h = head;//保存分割后的头节点
        for(int i = 1; i <= num; i++){
            if(mod > 0 && i % (len + 1) == 0){
                tem = head->next;
                head->next = NULL;
                ans.push_back(h);
                head = tem;
                h = head;
                mod--;
            }else if(mod < 1 && (i - num % k) % len == 0){
                tem = head->next;
                head->next = NULL;
                ans.push_back(h);
                head = tem;
                h = head;
            }else{
                head = head->next;
            }
        }
        while(ans.size() < k){
            ans.push_back(NULL);
        }
        return ans;
    }
};

运行结果:

在这里插入图片描述

复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 是链表的长度。需要遍历链表两次,得到链表的长度和分隔链表。
  • 空间复杂度 O ( 1 ) O(1) O(1)。只使用了常量的额外空间,注意返回值不计入空间复杂度。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

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

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

相关文章

亚马逊 CodeWhisperer: 个人免费的类似GitHubCopilot能代码补全的 AI 编程助手

1、官网 AI Code Generator - Amazon CodeWhisperer - AWS 官方扩展安装教程 2、安装VSCode 下载安装VSCode 3、VSCode安装CodeWhisperer插件 安装VSCode插件 - AWS Toolkit主侧栏&#xff0c;点击AWS &#xff0c;展开CodeWhisperer&#xff0c;点击Start 在下拉菜单中点…

【100个 Unity实用技能】 | C# 中关于补位的写法 PadLeft,PadRight 函数

Unity 小科普 老规矩&#xff0c;先介绍一下 Unity 的科普小知识&#xff1a; Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者&#xff0c;借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…

LeetCode_101

内容提要 贪心算法 保证每次操作都属局部最优的&#xff0c;从而使得最后的结果是全局最优 全局结果是局部结果的简单求和&#xff0c;且局部结果互不相干 分配问题 分发饼干 455 简单 分发糖果 135 困难 先从左往右遍历一遍&#xff0c;如果右边孩子的评分比左边的高…

TryHackMe-Year of the Jellyfish(linux渗透测试)

Year of the Jellyfish 请注意 - 此框使用公共 IP 进行部署。想想这对你应该如何应对这一挑战意味着什么。如果您高速枚举公共 IP 地址&#xff0c;ISP 通常会不满意… 端口扫描 循例nmap 扫描结果中还有域名&#xff0c;加进hosts FTP 枚举 尝试anonymous Web枚举 有三个端…

LoRa无线通信技术之CAD介绍

信道活动检测 Lora扩频调制技术的使用在确定信道是否已被可能低于接收机噪声底限的信号。在这种情况下使用常规的RSSI方式判断显然是不切实际的。为此,信道活动检测器用于检测其他LoRaTM信号的存在。下图为通道活动检测(CAD)过程: 工作原理 Lora信道活动检测模式被设计成以最…

一站式指标平台 Kyligence Zen 功能详解

近日&#xff0c;Kyligence 正式发布一站式指标平台 Kyligence Zen GA 版本。其基于 Kyligence 核心 OLAP 能力打造&#xff0c;融合了领先企业建设指标平台的丰富实践&#xff0c;具备 ZenML 指标语言、指标目录、Excel / WPS 直连分析、模板市场等创新能力&#xff0c;将以简…

GPU受限,国内AI大模型能否交出自己的答卷?

继百度之后&#xff0c;阿里、华为、京东、360等大模型也陆续浮出水面&#xff0c;大模型军备竞赛正式开启。 4月7日&#xff0c;阿里云宣布自研大模型“通义千问”开始邀请企业用户测试体验。 4月8日&#xff0c;华为云人工智能领域首席科学家田奇现身《人工智能大模型技术高峰…

一起学 WebGL:图元的类型

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天来说说 WebGL 中的三种图元。 在 WebGL 中&#xff0c;图元有三种&#xff1a;点、线、以及三角形。 绘制的 API 为&#xff1a; gl.drawArrays(mode, first, count)这里的 mode 就是要绘制的图元类型。 我们绘制 4 个点&…

办公协作效率想提质增效,可借助开源大数据工具!

在信息爆炸式发展的今天&#xff0c;提升办公协作效率&#xff0c;让各部门的信息有效互通起来&#xff0c;做好数据管理&#xff0c;已经成为众企业提升竞争力的方式方法。那么&#xff0c;如果想要提升办公效率&#xff0c;就需要了解开源大数据工具了。在数字化发展进程中&a…

HTTP协议概述 | 简析HTTP请求流程 | HTTP8种请求方法

目录 &#x1f30f; HTTP的简单介绍 何为HTTP HTTP1.0与HTTP1.1 &#x1f30f; HTTP的请求方法 1、OPTIONS 2、HEAD 3、GET 4、POST 5、PUT 6、DELETE 7、TRACE 8、CONNECT &#x1f30f; HTTP的工作原理 &#x1f30f; HTTP请求/响应的步骤 1、客户端连接到Web…

AI 芯片的简要发展历史

随着人工智能领域不断取得突破性进展。作为实现人工智能技术的重要基石&#xff0c;AI芯片拥有巨大的产业价值和战略地位。作为人工智能产业链的关键环节和硬件基础&#xff0c;AI芯片有着极高的技术研发和创新的壁垒。从芯片发展的趋势来看&#xff0c;现在仍处于AI芯片发展的…

【案例教程】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作实践技术

【原文链接】: 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作实践技术https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247537049&idx3&sn31ef342c4808aed6fee6ac108b899a33&chksmfe6897f3c91f1ee5c4fa8e4eeea34…

JDBC概述三(批处理+事务操作+数据库连接池)

一&#xff08;批处理&#xff09; 1.1 批处理简介 批处理&#xff0c;简而言之就是一次性执行多条SQL语句&#xff0c;在一定程度上可以提升执行SQL语句的速率。批处理可以通过使用Java的Statement和PreparedStatement来完成&#xff0c;因为这两个语句提供了用于处理批处理…

IO多路复用机制详解

高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型&#xff0c;常见的IO模型有四种&#xff1a; &#xff08;1&#xff09;同步阻塞IO&#xff08;Blocking IO&#xff09;&#xff1a;即传统的IO模型。 &#xff08;2&#xff09;同步非阻塞IO&#xff08;Non-blo…

【WebGIS实例】(7)MapboxGL绘制不同颜色的Symbol图标

前言 在上一篇实例博客中&#xff08;MapboxGL绘制简易气泡图&#xff09;我们绘制了一个简易的单色气泡图&#xff0c;现在需求升级了。我们需要为气泡加载不同的颜色。 而要实现这个效果&#xff0c;其实相当简单&#xff0c;直接利用Mapbox提供的SDF渲染方法。 官网教程参考…

当星辰天合 SDS 遇见 Elastic

4 月 8 日&#xff0c;“Elastic 中国开发者大会 2023 ”在深圳举行&#xff0c;XSKY星辰天合对象存储产品总监邹博引代表星辰天合参加了此次大会&#xff0c;并做了主题为《SDS 与 Elasticsearch 的碰撞》的分享。“Elastic 中国开发者大会 2023 ”是由 Elastic、Elastic 中文…

【三十天精通Vue 3】 第三天 Vue 3的组件详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 组件的概述1. Vue 3 的组件系统2. Vue 3 组件的特点…

【CE】Mac下的CE教程Tutorial:进阶篇(第9关:共享的代码)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第9关&#xff1a;共享的代码翻译操作&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第9关&#xff1a;共享的代码 翻…

Python数据分析matplotlib学习

Python数据分析的工具和库包括&#xff1a; 1.Jupyter Notebook&#xff1a;用于交互式数据分析和可视化。 2.NumPy&#xff1a;用于进行数值计算和数组操作。 3.Pandas&#xff1a;用于数据处理和清洗。 4.Matplotlib&#xff1a;用于数据可视化。 5.Scikit-learn&#xff1a;…

MAZDA CX-50没现车怎么办?赶紧去VR看车啊!

爱车一族往往都有过这样的经历&#xff1a;听说某家品牌出了一款心仪的新车&#xff0c;于是一直心心念念想要先睹为快。然而这时候问题就来了&#xff1a;新车从发布到量产上市往往要经历一段过程。没有现车的日子里&#xff0c;就算每天去4S店蹲守也看不到新车。那种心里痒痒…