news 2026/5/21 0:48:51

解决leetcode第3826题.最小分割分数问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解决leetcode第3826题.最小分割分数问题

3826.最小分割分数

难度:困难

问题描述:

给你一个整数数组nums和一个整数k。

你的任务是将nums分割成恰好k个子数组,并返回所有有效分割方案中最小可能的分数。

一个分割方案的分数是其所有子数组值的总和。

子数组的值定义为sumArr*(sumArr+1)/2,其中sumArr是该子数组元素的总和。

子数组是数组中连续的非空元素序列。

示例1:

输入:nums=[5,1,2,1],k=2

输出:25

解释:

我们必须将数组分割成k=2个子数组。一种最优方案是[5]和[1,2,1]。

第一个子数组的sumArr=5,value=5×6/2=15。

第二个子数组的sumArr=1+2+1=4,value=4×5/2=10。

该分割方案的分数为15+10=25,这是可能的最小分数。

示例2:

输入:nums=[1,2,3,4],k=1

输出:55

解释:

由于必须分割成k=1个子数组,所有元素都属于同一个子数组:[1,2,3,4]。

该子数组的sumArr=1+2+3+4=10,value=10×11/2=55。

该分割方案的分数为55,这是可能的最小分数。

示例3:

输入:nums=[1,1,1],k=3

输出:3

解释:

我们必须将数组分割成k=3个子数组。唯一的有效分割方案是[1],[1],[1]。

每个子数组的sumArr=1,value=1×2/2=1。

该分割方案的分数为1+1+1=3,这是可能的最小分数。

提示:

1<=nums.length<=1000

1<=nums[i]<=104

1<=k<=nums.length

问题分析:

将nums数组分割成恰好k个子数组,则这k个子数组的长度和必然等nums的长度,把数组nums的长度设为n,这个问题就可以抽象为如何把n分成k个数之和,把各种分法找出之后,再将每一种分法解析为相应的子数组,并求出对应的分数,最后在其中找到最小分数即可。

程序如下:

#把n分成k个数之和,返回各种分法 def get_division_method(n,k): if k==1: return [[n]] elif k==2: t=[] for i in range(1,n): t.append([i,n-i]) return t else: t=[] for i in range(1,n): m=get_division_method(n-i,k-1) for j in m: j.append(i) t.append(j) return t #根据一个分解方案解析生成对应的子数组并返回 def analysis_plan(nums,a): t=[] k=0 for i in a: b=nums[k:k+i] t.append(b) k=k+i return t #计算一个子数组的分数,并返回 def get_score(sub_array): s=sum(sub_array) return s*(s+1)/2 #主程序 nums=eval(input('pls input nums=')) k=int(input('pls input k=')) n=len(nums) a=get_division_method(n,k) score=[] for i in a: t=analysis_plan(nums,i) s=0 for j in t: s+=get_score(j) score.append([t,s]) score.sort(key=lambda x:x[1]) print(f'最优方案是{score[0][0]},该分割方案的分数为{int(score[0][1])}')

运行实例一

pls input nums=[1,2,3]

pls input k=1

最优方案是[[1, 2, 3]],该分割方案的分数为21

运行实例二

pls input nums=[1,2,3,4,5]

pls input k=2

最优方案是[[1, 2, 3], [4, 5]],该分割方案的分数为66

运行实例三

pls input nums=[5,4,2,1]

pls input k=3

最优方案是[[5], [4], [2, 1]],该分割方案的分数为31

运行实例四

pls input nums=[1,3,5,7,9]

pls input k=4

最优方案是[[1, 3], [5], [7], [9]],该分割方案的分数为98

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/18 12:57:48

ThreeJS入门到进阶教程

目录 卷一&#xff1a;初识三维 在浏览器里造个小世界 主题&#xff1a; 环境搭建与核心概念 第一章&#xff1a;打开潘多拉的工具箱 Three.js的前世今生——为什么它成了Web3D的事实标准五分钟搭建开发环境——ViteES Module的现代前端仪式感Scene、Camera、Renderer的三位一…

作者头像 李华
网站建设 2026/5/20 14:18:23

基于Zigbee通信协议设计一个无线指纹识别门禁系统

基于Zigbee通信协议的无线指纹识别门禁系统设计 第一章 绪论 传统门禁系统多采用刷卡、密码等验证方式&#xff0c;存在卡片易丢失、密码易泄露、布线复杂、扩展性差等问题&#xff0c;难以满足现代楼宇、园区、智能家居等场景下的安全化、无线化、智能化需求。Zigbee通信协议凭…

作者头像 李华
网站建设 2026/5/21 0:05:24

趁早转行,安全没有未来

**昨天这张图想必大家都看到了吧 ** 再加之现在的安全行业招聘行情和裁员现象&#xff0c;懂得都懂&#xff01; 对于目前还有一份从事安全工作的小伙伴&#xff0c;我的建议是苟住&#xff0c;然后去试试其他的路子&#xff08;守正出奇&#xff09;&#xff0c;用黑客思维去…

作者头像 李华
网站建设 2026/5/20 18:49:30

内含18禁~~关于自学_跳槽_转行做网络安全行业的一些建议

很好&#xff0c;如果你是被题目吸引过来的&#xff0c;那请看完再走&#xff0c;还是有的~ 为什么写这篇文章 如何自学入行&#xff1f;如何小白跳槽&#xff0c;年纪大了如何转行等类似问题 &#xff0c;发现很多人都有这样的困惑。 下面的文字其实是我以前的一个回答&…

作者头像 李华
网站建设 2026/5/20 18:49:23

2026年Java高级工程师面试题总结及参考答案

身为一个7年的Java开发&#xff0c;我发现面试的后端都有几个相似的缺点&#xff0c;往往导致他们到嘴的offer悄然飞走&#xff0c;还是需要引以为戒&#xff0c;不然机会与时间都在浪费&#xff01;&#xff01; 1. Java核心掌握不牢 对多线程&#xff08;线程池、锁机制&…

作者头像 李华
网站建设 2026/5/19 21:49:16

异物防护等级-IP67

异物防护等级&#xff08;外文名&#xff1a;Ingress Protection Rating&#xff0c;侵入防护等级&#xff09;&#xff0c;又称“防水等级”“防尘等级”&#xff0c;是衡量机械和电子设备对固体异物、液体渗透及意外接触防护能力的国际通用标准&#xff0c;其等级代码由国际标…

作者头像 李华