news 2026/7/12 4:45:17

Kimi LeetCode 3538. 合并得到最小旅行时间 Rust实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kimi LeetCode 3538. 合并得到最小旅行时间 Rust实现

这是 LeetCode 3538. 合并得到最小旅行时间 的 Rust 实现。

思路

本题是划分型动态规划。恰好执行 `k` 次合并,等价于将原路标序列切分为 `n-k` 个连续段,每段的单位时间为该段内所有 `time` 之和。

状态定义: `dp[i][used][last]` 表示:
- 当前位于第 `i` 个路标
- 已经用了 `used` 次合并
- 当前连续段的单位时间从原数组下标 `last` 开始累加

转移: 从 `i` 跳到 `j`(`j > i`),消耗 `j-i-1` 次合并,当前段距离为 `position[j]-position[i]`,单位时间为 `sum(time[last..i])`。

复杂度: `O(n² × k²)`,由于 `n ≤ 50, k ≤ 10`,完全在时限内。

---

```rust
impl Solution {
pub fn min_travel_time(l: i32, n: i32, k: i32, position: Vec<i32>, time: Vec<i32>) -> i32 {
let n = n as usize;
let k = k as usize;
let position: Vec<i32> = position;
let time: Vec<i32> = time;

// 前缀和:prefix[i] = time[0] + ... + time[i-1]
let mut prefix = vec![0; n + 1];
for i in 0..n {
prefix[i + 1] = prefix[i] + time[i];
}

const INF: i32 = i32::MAX / 2;

// dp[i][used][last]
let mut dp = vec![vec![vec![INF; n]; k + 1]; n];

// 终点:position[n-1],无需再行驶
for used in 0..=k {
for last in 0..n {
dp[n - 1][used][last] = if used == k { 0 } else { INF };
}
}

// 从右往左填表
for i in (0..n - 1).rev() {
for used in 0..=k {
for last in 0..=i {
// 当前连续段的单位时间 = sum(time[last..i])
let rate = prefix[i + 1] - prefix[last];

// 枚举下一个路标 j
let max_j = (i + 1 + (k - used)).min(n - 1);
for j in i + 1..=max_j {
let merges = j - i - 1;
if used + merges > k {
continue;
}

let distance = position[j] - position[i];
// 下一段从 i+1 开始重新累加单位时间
let next = dp[j][used + merges][i + 1];
if next < INF {
dp[i][used][last] = dp[i][used][last].min(distance * rate + next);
}
}
}
}
}

dp[0][0][0]
}
}
```

---

验证:
- 示例 1:`l=10, n=4, k=1, position=[0,3,8,10], time=[5,8,3,6]` → 62 ✓
- 示例 2:`l=5, n=5, k=1, position=[0,1,2,3,5], time=[8,3,9,3,3]` → 34 ✓

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

C++ Builder 6 源代码深度解析:从经典VCL框架到现代工程实践

1. 项目概述与价值重估如果你手头还有一张写着“C Builder 6 彻底研究”或类似名字的光盘&#xff0c;先别急着把它当杯垫。这玩意儿现在可能比你想的值钱。我说的不是它的物理价值&#xff0c;而是对于任何一个还在维护、学习&#xff0c;甚至只是好奇那个时代Windows桌面应用…

作者头像 李华
网站建设 2026/7/12 4:36:22

Java程序员30天转型大模型应用开发:从RAG到AI Agent实战指南

最近在技术圈里&#xff0c;不少Java开发者都面临一个共同的困惑&#xff1a;传统后端开发岗位竞争日趋激烈&#xff0c;而大模型应用开发却成为新的技术热点。很多公司的JD里都明确写着"有大模型相关经验者优先"&#xff0c;这让不少Java程序员开始思考转型之路。作…

作者头像 李华
网站建设 2026/7/12 4:35:52

Unity中Newtonsoft.Json避坑指南:配置、性能优化与平台适配

1. 项目概述&#xff1a;为什么Unity开发者绕不开Newtonsoft.Json如果你在Unity项目里处理过稍微复杂一点的JSON数据&#xff0c;比如从服务器拉取的玩家背包信息、复杂的配置表&#xff0c;或者需要保存一个包含嵌套列表和自定义类的游戏存档&#xff0c;那你大概率已经和Newt…

作者头像 李华
网站建设 2026/7/12 4:35:12

UE5植被系统性能优化:LOD配置与材质切换实战指南

1. 项目概述&#xff1a;为什么你的UE5植被系统总是“掉帧”&#xff1f;如果你正在用UE5做开放世界或者大场景&#xff0c;大概率遇到过这个头疼的问题&#xff1a;场景里植被一多&#xff0c;帧率就直线下降&#xff0c;GPU负载拉满&#xff0c;甚至直接崩溃。这太常见了&…

作者头像 李华