当前位置: 首页 > news >正文

Kimi LeetCode 2547. 拆分数组的最小代价 C++实现

这道题的核心思路是动态规划 记忆化搜索。我们定义 dfs(i) 为从下标 i 开始拆分数组的最小代价答案即为 dfs(0)。关键观察子数组的重要性 k trimmed(subarray).length。其中 trimmed 操作会移除子数组中只出现一次的数字。如果我们用 cnt[x] 记录数字 x 在当前子数组中的出现次数用 one 记录出现次数恰好为 1 的数字个数那么- trimmed(subarray).length 子数组总长度 - one- 重要性 k (j - i 1) - one算法设计在 dfs(i) 中枚举子数组的右端点 j从 i 到 n-1同时维护一个计数数组和 one 变量- 当 nums[j] 第一次出现时one- 当 nums[j] 第二次出现时它从唯一变成重复所以 one--- 第三次及以上出现one 不变转移方程dfs(i) min{ k (j - i 1 - one) dfs(j 1) } 对所有 j ≥ i使用记忆化数组 f[i] 避免重复计算。C 实现cppclass Solution {public:int minCost(vectorint nums, int k) {int n nums.size();// f[i] 表示从下标 i 开始拆分的最小代价0 表示未计算// 注意题目保证答案为正所以可以用 0 作为未访问标记vectorint f(n, 0);functionint(int) dfs [](int i) - int {if (i n) return 0;if (f[i] ! 0) return f[i];// cnt[x] 记录子数组中数字 x 的出现次数// 由于 nums[i] n可以用数组代替哈希表vectorint cnt(n, 0);int one 0; // 出现次数为 1 的数字个数int ans INT_MAX;for (int j i; j n; j) {int x cnt[nums[j]];if (x 1) {one; // 新出现的唯一数字} else if (x 2) {--one; // 从唯一变成重复}// x 3 时one 不变已经是重复数字// 当前子数组 [i, j] 的重要性k 长度 - oneint cost k (j - i 1 - one) dfs(j 1);ans min(ans, cost);}f[i] ans;return ans;};return dfs(0);}};复杂度分析- 时间复杂度O(n^2)。每个状态 dfs(i) 最多计算一次每次计算需要 O(n) 的枚举。- 空间复杂度O(n)。记忆化数组和递归栈的空间。示例验证以 nums [1,2,1,2,1,3,3], k 2 为例- 拆分为 [1,2] 和 [1,2,1,3,3]- 第一个子数组2 (2 - 2) 21 和 2 都只出现一次trimmed 后长度为 0- 第二个子数组2 (5 - 3) 61 出现 3 次2 出现 1 次3 出现 2 次仅出现一次的是 2所以 trimmed 长度为 4不对重新算1 出现 3 次保留2 出现 1 次移除3 出现 2 次保留trimmed [1,1,3,3]长度为 4重要性 2 4 6- 总代价 2 6 8 ✓参考实现来自 LeetCode 官方题解和 Doocs 开源社区 。
http://www.zskr.cn/news/1341400.html

相关文章:

  • 2026 最新最全行业测评及攻略|全球/国内GEO公司排名前十,看谁在主宰AI流量时代入口? - 互联网科技品牌测评
  • 教育/教培行业专属:2026企业微信SCRM选型指南
  • 零售/电商/门店连锁行业专属:企业微信SCRM选型指南
  • 为开源工具OpenClaw配置Taotoken作为后端模型提供商
  • 2026年GEO优化服务商/公司/厂家最专业靠谱推荐:国内五家知名主流头部优选服务商综合解读+GEO优化FAQ - 互联网科技品牌测评
  • AutoGen实战:微软的多Agent对话编程指南
  • AcFunDown终极指南:三步学会免费下载A站视频的完整教程
  • py之代码实现获取字符串中每个字符的unicode值
  • c语言之pubnub库代码示例
  • 进程与线程管理原理
  • 2026年5月游戏鼠标品牌推荐:十大排行评测电竞防误触专业性价比高市场份额 - 品牌推荐
  • 2026哈尔滨过期虫草回收服务商合规排行盘点:重庆发霉虫草回收/重庆同仁堂虫草回收/重庆老酒回收/重庆过期虫草回收/选择指南 - 优质品牌商家
  • Windows系统终极优化神器:3步完成一键安装与系统管理
  • “#FF6B6B”能直接输入吗?Midjourney色彩控制的5个致命误区(第3个90%用户正在踩坑)
  • 【Midjourney洛可可风格创作指南】:20年AI艺术总监亲授7大黄金参数+3类易踩雷区
  • Django 从 0 到 1 打造完整电商平台:个人中心与用户信息修改
  • day031
  • 2026年当前天津至周边城市干线直达物流服务深度解析与厂家推荐 - 2026年企业推荐榜
  • 2025-2026年马赛克瓷砖品牌推荐:五大评测市场份额特点厨房卫浴防霉耐脏注意事项 - 品牌推荐
  • 聊一聊5家软件许可优化公司,哪个更适合你?
  • 2026年5月马赛克瓷砖品牌推荐:五款排行评测商业空间高耐磨特性专业价格 - 品牌推荐
  • 内存管理原理与策略
  • 《科技代替了我工作》的传播入口:技术焦虑如何落到听众
  • 基于Windows内核驱动框架的游戏控制器虚拟化技术实现方案
  • ncmdumpGUI:解锁网易云音乐NCM格式的3步可视化解决方案
  • 如何快速掌握ElectronBot桌面机器人:从零开始到二次开发的完整指南
  • 淘宝淘金币自动化脚本:一键解放双手,每天节省25分钟
  • 淘金币自动化脚本:每天节省20分钟,解放双手的终极指南
  • 如何用Ryujinx在PC上完美运行Switch游戏:完整新手指南
  • 2026年精选AI论文网站指南(高分定稿版)