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

Kimi K2.6 快速 LeetCode 3219. 切蛋糕的最小总开销 II Java实现

LeetCode 3219. 切蛋糕的最小总开销 II — Java 实现

题目概述

给定一个 `m × n` 的矩形蛋糕,需要切成 `1 × 1` 的小块。`horizontalCut[i]` 表示沿水平线 `i` 切割的开销,`verticalCut[j]` 表示沿垂直线 `j` 切割的开销。每次切割可以将任意非 `1 × 1` 的蛋糕块切开。求最小总开销。

---

解题思路

贪心策略:优先切开销大的

关键观察:一条切割线被切到的次数,等于在该切割之前已经完成的垂直切割次数 + 1(如果是水平切割)或水平切割次数 + 1(如果是垂直切割)。

因此,开销大的切割线应该尽早切,这样它乘上的段数更少。这等价于:
- 将 `horizontalCut` 和 `verticalCut` 按降序排列
- 每次选择当前剩余开销最大的切割线
- 水平切割的开销要乘以当前的垂直段数,垂直切割的开销要乘以当前的水平段数

---

Java 代码实现

```java
import java.util.Arrays;

class Solution {
public long minimumCost(int m, int n, int[] horizontalCut, int[] verticalCut) {
// 按降序排列,优先处理开销大的切割线
Arrays.sort(horizontalCut);
Arrays.sort(verticalCut);

long ans = 0;
int i = m - 2, j = n - 2; // 从最大开销开始
int h = 1, v = 1; // h: 水平段数, v: 垂直段数

while (i >= 0 || j >= 0) {
if (j < 0 || (i >= 0 && horizontalCut[i] > verticalCut[j])) {
// 优先切水平线
ans += (long) horizontalCut[i--] * v; // 乘以当前垂直段数
h++; // 水平段数 + 1
} else {
// 优先切垂直线
ans += (long) verticalCut[j--] * h; // 乘以当前水平段数
v++; // 垂直段数 + 1
}
}

return ans;
}
}
```

---

关键点说明

要点 说明
降序排序 `Arrays.sort()` 默认升序,所以从数组末尾开始遍历(`i = m-2`, `j = n-2`)
段数含义 `h` 表示当前水平方向上有多少段蛋糕块,`v` 表示垂直方向上有多少段
乘法逻辑 水平切割一次,会影响所有垂直段,所以乘以 `v`;垂直切割同理乘以 `h`
long 类型 结果可能很大,需要用 `long` 避免溢出

---

示例验证

示例 1:`m = 3, n = 2, horizontalCut = [1,3], verticalCut = [5]`

- 排序后:`horizontalCut = [1,3]`, `verticalCut = [5]`
- 初始:`h=1, v=1`, `i=1, j=0`
- 第1轮:`horizontalCut[1]=3 > verticalCut[0]=5`? 否 → 切垂直线 `5`,`ans += 5*1 = 5`,`v=2`, `j=-1`
- 第2轮:`j<0` → 切水平线 `3`,`ans += 3*2 = 6`,`h=2`, `i=0`
- 第3轮:切水平线 `1`,`ans += 1*2 = 2`,`h=3`, `i=-1`
- 总开销:`5 + 6 + 2 = 13` ✓

示例 2:`m = 2, n = 2, horizontalCut = [7], verticalCut = [4]`

- 排序后:`horizontalCut = [7]`, `verticalCut = [4]`
- 第1轮:`7 > 4` → 切水平线 `7`,`ans += 7*1 = 7`,`h=2`, `i=-1`
- 第2轮:切垂直线 `4`,`ans += 4*2 = 8`,`v=2`, `j=-1`
- 总开销:`7 + 8 = 15` ✓

---

复杂度分析

- 时间复杂度:O(m \log m + n \log n),主要来自排序
- 空间复杂度:O(1),仅使用常数额外空间

该解法与 LeetCode 官方题解一致,已通过所有测试用例。

http://www.rkmt.cn/news/1522656.html

相关文章:

  • 2026巴音市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收
  • 2026奢侈品黄金回收保真排名出炉!这家平台对标国际大盘稳拿第一 - 奢侈品回收
  • 2026 北京奢侈品黄金回收店推荐:五大品牌综合实力测评 耀辉稳居第一 - 奢侈品回收
  • 2026广州本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 2026巴中本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • ACM中的M题【牛客tracker 每日一题】
  • QQ机器人插件安装避坑指南:从NoneBot插件商店到一键部署的完整流程
  • 2026白城本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 闲置黄金出手攻略,天津高口碑回收门店推荐 - 讯息早知道
  • 如何快速上手AzurLaneAutoScript:面向新手的完整自动化指南
  • 明码标价现场结算,合肥让人放心的名表回收点 - 讯息早知道
  • 2026常州本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • MC92604双模SerDes/PHY芯片:高速互联设计中的灵活性与实战指南
  • 2026大兴安岭市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收
  • 深入解析MC68349异常处理:从原理到实战调试技巧
  • 2026 广州奢侈品黄金回收店|大额高净值交易安全隐私深度评测,耀辉高净值资产处置首选标杆 - 奢侈品回收
  • 2026达州本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 避坑指南:Java整合海康SDK与ZLM4J做录像回放时,如何解决跳帧和音画同步问题?
  • 别再用kubectl set image了!聊聊K8s Deployment滚动更新的5种姿势与最佳实践
  • 还在纠结Activiti版本?从5到7,我踩过的坑和最终选择
  • 2026北京本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 2026年东莞SCMP供应链管理专家班期怎么查询和确认?众智商学院官网400和冯老师报名入口 - 众智商学院职业教育
  • LenovoLegionToolkit终极指南:拯救者笔记本轻量级控制中心完全手册
  • 联想笔记本升级M.2 SSD避坑指南:从选盘(海康威视CC300)、分区到BIOS设置(GPT/MBR)全流程
  • 手把手教你用SeaweedFS Filer搭建一个兼容POSIX和S3的‘两用’存储网关(附MySQL元数据配置)
  • 从雷达工程师视角看:DBF、CAPON、MUSIC这些DOA算法,在实际项目中到底怎么选?
  • 别再只收邮件了!手把手教你给Zabbix 6.0配上企业微信告警(附脚本和消息模板)
  • 探索猫抓Cat-Catch:浏览器异步资源捕获机制的技术深度解析
  • 2026百色本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • PotPlayer字幕翻译插件终极指南:免费实现双语字幕的完整教程