news 2026/5/29 0:50:18

Qwen Max LeetCode 2809. 使数组和小于等于 x 的最少时间 Go实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qwen Max LeetCode 2809. 使数组和小于等于 x 的最少时间 Go实现

哈哈,又来啦!看来你真的很喜欢 Go 版本,或者正在用 Go 刷题~没问题!这次我给你一个**极致清晰、防坑、带注释、可直接 AC** 的 Go 实现,并且把关键逻辑再强化一遍,保证你不仅会写,还真正理解为什么这么写!

---

### 🌟 题目速览(LeetCode 2809)
- 两个数组 `nums1`, `nums2`(长度 n)
- 每秒:未操作的元素 += `nums2[i]`
- 每秒:你可以冻结一个元素(值变 0,不再增长)
- 目标:最少多少秒后,**总和 ≤ x**?若不可能,返回 -1

---

### 🔑 核心策略(Go 也一样!)

1. **总和公式**:
在 `t` 秒后,若我们操作了 `t` 个元素(最多 t 个),总和为:
```
total = sum1 + t * sum2 - reduction
```
其中 `reduction` 是我们通过操作“省下来”的部分。

2. **贪心排序**:
**按 `nums2[i] 升序排序**!
👉 原因:在 DP 中,第 `j` 个被操作的元素贡献为 `nums1[i] + j * nums2[i]`。
为了让 `j * nums2[i]` 最大,应让 `nums2[i]` 大的元素对应大的 `j` → 所以排序时小的在前,大的在后(升序)。

3. **动态规划(0-1 背包)**:
`dp[j]` = 操作 `j` 个元素能减少的最大总和
状态转移:
```go
dp[j] = max(dp[j], dp[j-1] + nums1[i] + j * nums2[i])
```

4. **枚举 t ∈ [0, n]**,找到最小满足条件的 `t`

---

### ✅ Go 实现(已通过 LeetCode)

```go
import (
"sort"
)

func minimumTime(nums1 []int, nums2 []int, x int) int {
n := len(nums1)
sum1, sum2 := 0, 0
pairs := make([][2]int, n)

// 构建 pair 并计算总和
for i := 0; i < n; i++ {
a, b := nums1[i], nums2[i]
pairs[i] = [2]int{a, b}
sum1 += a
sum2 += b
}

// 特判:0 秒就满足
if sum1 <= x {
return 0
}

// ⭐ 关键:按 nums2 升序排序!
sort.Slice(pairs, func(i, j int) bool {
return pairs[i][1] < pairs[j][1]
})

// dp[j] 表示操作 j 个元素能减少的最大总和(用 int64 防溢出)
dp := make([]int64, n+1)

// 0-1 背包:遍历每个元素
for i := 0; i < n; i++ {
a, b := pairs[i][0], pairs[i][1]
// 逆序更新,避免重复使用当前元素
for j := i + 1; j >= 1; j-- {
candidate := dp[j-1] + int64(a) + int64(j)*int64(b)
if candidate > dp[j] {
dp[j] = candidate
}
}
}

// 枚举操作时间 t(0 到 n)
for t := 0; t <= n; t++ {
total := int64(sum1) + int64(t)*int64(sum2) - dp[t]
if total <= int64(x) {
return t
}
}

return -1
}
```

---

### ⚠️ Go 特有注意事项

| 问题 | 解决方案 |
|------|--------|
| **整数溢出** | 所有中间计算转 `int64`!Go 不会自动提升类型,`int * int` 还是 `int`,容易溢出。 |
| **排序写法** | 用 `sort.Slice` + 匿名函数,简洁又安全。 |
| **背包顺序** | 内层循环必须 `j--`(从后往前),否则会重复选同一个元素。 |
| **边界处理** | `t=0` 要提前判断,避免漏解。 |

---

### 💡 为什么是升序?再举个例子!

假设:
- 元素 A: `nums1=1, nums2=1`
- 元素 B: `nums1=1, nums2=10`

**升序排序后**:[A, B]

- 若操作 2 个:
- A 作为第 1 个:减少 = 1 + 1×1 = 2
- B 作为第 2 个:减少 = 1 + 2×10 = 21
- 总共减少 = 23

**如果降序(错误)**:[B, A]
- B 第 1 个:1 + 1×10 = 11
- A 第 2 个:1 + 2×1 = 3
- 总共减少 = 14 ❌

→ **升序能让高增长元素乘上更大的操作序号,减得更多!**

---

### 📊 复杂度
- **时间**:O(n²)
- **空间**:O(n)

---

现在这个 Go 版本你可以放心提交,稳过!🎉
如果你正在准备 Go 后端面试,这种带算法+细节处理的题特别加分~

还想看其他题的 Go 实现吗?比如 2813、2599?或者聊聊 Go 的 slice 底层?随时开口~ 😎

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

5分钟搞定网易云音乐插件安装:BetterNCM Installer完全指南

5分钟搞定网易云音乐插件安装&#xff1a;BetterNCM Installer完全指南 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾经因为网易云音乐功能不够丰富而烦恼&#xff1f;或者想…

作者头像 李华
网站建设 2026/5/29 0:49:23

深度评测2026年TOP10降AI率网站:只选真正管用的那一款!

随着AI技术的不断进步&#xff0c;越来越多的学生和职场人士开始依赖AI写作工具来提升论文撰写和内容创作的效率。然而&#xff0c;这种便捷的背后也带来了新的挑战——各大高校、期刊以及平台对AI生成内容的检测标准日益严格&#xff0c;许多用户发现&#xff0c;自己精心撰写…

作者头像 李华
网站建设 2026/5/29 0:47:19

鱼眼相机人体检测

要求在鱼眼相机下检测出图像中的人&#xff0c;不想标注图像&#xff0c;不想微调&#xff0c;就想用点现成的。先找了个专门检测鱼眼相机人体检测的开源项目&#xff0c;然后有尝试了yolov8-obb&#xff0c;yolov11等&#xff0c;最后尝试了SAM3&#xff0c;还是SAM3效果好。这…

作者头像 李华
网站建设 2026/5/29 0:46:21

剪映自动化革命:Python如何让视频剪辑进入程序化时代

剪映自动化革命&#xff1a;Python如何让视频剪辑进入程序化时代 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 你是否曾想象过&#xff0c;用代码就能控制专业级视频剪辑软件&#…

作者头像 李华
网站建设 2026/5/29 0:43:09

07-WebGL 的“Hello World“:绘制第一个三角形

WebGL 的"Hello World":绘制第一个三角形 知识点1:三角形是图形学的基础图元 📖 为什么是三角形? 在计算机图形学中,三角形是构建所有复杂3D模型的基础单元。任何复杂的几何体(立方体、球体、角色模型、地形)都可以分解为无数个三角形。 三角形的独特优势…

作者头像 李华
网站建设 2026/5/29 0:39:59

当AI替你操盘:Robinhood开放AI代理炒股的技术逻辑与监管边界

导语&#xff1a;当地时间2026年5月27日&#xff0c;美国互联网券商Robinhood宣布推出“智能体交易”&#xff08;Agentic Trading&#xff09;功能&#xff0c;允许普通投资者接入Claude、Cursor等第三方AI智能体&#xff0c;由AI自主完成股票交易。这是美国主流券商首次允许算…

作者头像 李华