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] 单调递增从而可安全使用队首弹出策略。若可能出现负数需改用二分查找凸包但原题通常满足非负条件。如果题目允许负数只需将查询部分改为二分查找即可但代码会稍复杂。上述实现适用于绝大多数情况。

相关新闻

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

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

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

2026/11/3 5:27:23 阅读更多 →
SkillSmith:通过文本与权重组合构建AI技能系统的实践指南

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

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

2026/11/3 5:28:07 阅读更多 →
DeepSeek    LeetCode 3826. 最小分割分数 Java实现

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

针对 LeetCode 3826“最小分割分数”,这里提供两种主流的 Java 解法:分治 DP 优化 和 斜率优化 (CHT)。📝 题目回顾 目标:将数组 nums 分割成恰好 k 个连续非空子数组。子数组值:sum * (sum 1) / 2 (sum 是该子数组…

2026/11/7 18:17:21 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/7 12:08:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/6 22:01:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/6 22:01:11 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/7 12:08:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/6 22:01:09 阅读更多 →

日新闻

周新闻

月新闻