DeepSeek LeetCode 3826. 最小分割分数 C++实现

发布时间:2026/9/22 4:49:47

DeepSeek    LeetCode 3826. 最小分割分数 C++实现 针对 LeetCode 3826“最小分割分数”这里提供斜率优化 (Convex Hull Trick) 的 C 实现时间复杂度 O(k * n)空间复杂度 O(n)。---核心思路1. 状态定义dp_prev[i] 表示将前 i 个元素分成当前段数的最优两倍分数避免浮点数。2. 转移方程变形· 令前缀和 pref[i]最后一段起点为 jj 为前一段结束位置。· 转移dp_cur[i] min{ dp_prev[j] (pref[i]-pref[j])*(pref[i]-pref[j]1) }· 展开并整理为关于 pref[i] 的一次函数· 斜率 m -2 * pref[j]· 截距 c dp_prev[j] pref[j]^2 - pref[j]· 则原式 m * pref[i] c pref[i]^2 pref[i]3. 维护下凸包所有候选 j 对应一条直线用单调双端队列维护下凸包每次查询 x pref[i] 处的最小值。---C 代码实现cpp#include vector#include deque#include climitsusing namespace std;class Solution {public:long long minPartitionScore(vectorint nums, int k) {int n nums.size();vectorlong long pref(n 1, 0);for (int i 0; i n; i) {pref[i 1] pref[i] nums[i];}// dp_prev: 分成 1 段时的两倍分数vectorlong long dp_prev(n 1, 0);for (int i 1; i n; i) {long long s pref[i];dp_prev[i] s * (s 1); // 两倍分数}// 迭代分段数 2 .. kfor (int seg 2; seg k; seg) {vectorlong long dp_cur(n 1, LLONG_MAX / 4);dequepairlong long, long long hull; // 存储直线 (斜率, 截距)for (int i 1; i n; i) {int j i - 1; // 新候选直线的下标if (j 1) {long long m -2 * pref[j];long long c dp_prev[j] pref[j] * pref[j] - pref[j];// 将新直线加入凸包维护下凸性while (hull.size() 2) {auto [m1, c1] hull[hull.size() - 2];auto [m2, c2] hull[hull.size() - 1];// 检查新直线是否使倒数第二条直线无用// 条件: (c2 - c1) * (m1 - m) (c - c1) * (m1 - m2)if ((c2 - c1) * (m1 - m) (c - c1) * (m1 - m2)) {hull.pop_back();} else {break;}}hull.push_back({m, c});}// 查询 x pref[i] 处的最优直线队首while (hull.size() 2) {auto [m1, c1] hull[0];auto [m2, c2] hull[1];if (m1 * pref[i] c1 m2 * pref[i] c2) {hull.pop_front();} else {break;}}if (!hull.empty()) {auto [m, c] hull.front();dp_cur[i] m * pref[i] c pref[i] * pref[i] pref[i];} else {dp_cur[i] LLONG_MAX / 4; // 不可能状态}}dp_prev.swap(dp_cur);}return dp_prev[n] / 2; // 除以2得到原始分数}};---复杂度分析· 时间复杂度O(k * n)每个状态进出队列一次总操作线性。· 空间复杂度O(n)存储前缀和、DP数组以及凸包队列。---注意事项· 所有计算使用 long long 避免溢出。· 计算过程中存储两倍分数最后除以2避免浮点数运算。· 该实现假设 nums 中元素非负保证 pref[i] 单调递增从而可安全使用队首弹出策略。若可能出现负数需改用二分查找凸包但原题通常满足非负条件。如果题目允许负数只需将查询部分改为二分查找即可但代码会稍复杂。上述实现适用于绝大多数情况。
延伸阅读

更多相关文章

2026/9/19 14:34:54

DeepSeek LeetCode 3826. 最小分割分数 Rust实现

这道题的核心解法是斜率优化DP (Convex Hull Trick)。Rust 的实现思路与 Python / Java 一致,但需要利用其强大的泛型和迭代器来写出更安全、高效的代码。📝 核心思路回顾状态转移方程可变形为查询直线 y m*x c 在 x pref[i] 处的最小值,其…

2026/9/22 6:21:41

SkillSmith:通过文本与权重组合构建AI技能系统的实践指南

在构建智能应用时,我们常常面临一个挑战:如何快速、灵活地组合已有的能力,创造出满足特定需求的新功能?无论是希望将文本描述转化为可执行的代码,还是将多个预训练模型的能力融合,传统的开发流程往往涉及复…

2026/9/19 23:46:01

辐射EMC测试全流程解析:从原理、标准到设计整改实战

1. 项目概述:为什么我们需要深入理解辐射EMC测试?如果你是一名硬件工程师、产品经理,或者负责将任何带电的设备推向市场,那么“辐射电磁兼容性测试”这个词,对你而言绝不是一个遥远的、只属于实验室的概念。它更像是一…

2026/9/22 18:11:19

3个坑讲透名词所有格的用法 面试必问性能优化实战

3个坑讲透名词所有格的用法 面试必问性能优化实战 复制来的代码跑不通不知道怎么调?别急着骂人,十有八九是你没搞懂底层机制。很多兄弟在CSDN或者GitHub上扒了段处理字符串的代码,看着挺简洁,往项目里一扔,内存泄漏或者CPU飙高。这其实是…

2026/9/22 18:11:19

3步搞定分页符怎么插入,手写实现避坑指南

3步搞定分页符怎么插入,手写实现避坑指南 版本升级后 API 全变了,原本一行代码能搞定的排版功能,现在直接报错。别慌,这就是为什么你需要理解底层逻辑,而不是只会调用库函数。今天咱们不整虚的,直接拆解 分页符怎么插入 的底层原理,通过…

2026/9/22 18:06:19

3步吃透管理自己,面试必问底层逻辑全解析

3步吃透管理自己,面试必问底层逻辑全解析 面试被问“如何管理自己”时,80%的开发者支支吾吾,答非所问。 这不仅是软技能题,更是考察你对 状态机转换 与 资源调度 理解的试金石。…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/22 0:04:49

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点 官方文档几百页翻到头还是懵?面试问到 输电线路在线监测 的数据链路时,脑子一片空白?别慌,这种 高频面试题 我整理了10年,专门治各种“文档太长抓不住重点”的毛病。…

2026/9/22 0:04:49

中介房源管理系统重构避坑:3个关键步骤搞定API变更

中介房源管理系统重构避坑:3个关键步骤搞定API变更 版本升级后 API 全变了,这种痛只有真做过的人懂。 很多团队在接手老旧房产项目时,最崩溃的不是代码烂,而是底层框架升级后,原本熟悉的接口调用方式彻底失效。 这份 保姆级教程…

2026/9/22 0:04:49

3个坑点带你一文搞懂55gg小游戏源码

3个坑点带你一文搞懂55gg小游戏源码 盯着控制台满屏的红色报错,看着那一长串 StackTrace ,是不是脑子瞬间宕机?别急,这种时候最忌讳的就是盲目改代码。很多刚入行的前端同学,面对 55gg 小游戏这类轻量级 H5…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/21 18:32:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码