news 2026/4/26 4:10:32

豆包 LeetCode 1872.石子游戏 VIII TypeScript实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
豆包 LeetCode 1872.石子游戏 VIII TypeScript实现

LeetCode 1872 石子游戏 VIII TypeScript 实现

题目大意

给定数组 stones ,两人轮流进行操作:

- 每次选择至少前 k 个石子(k≥2)
- 拿走前 k 个石子,得分 = 前 k 个石子总和
- 拿走后,后面石子向前拼接,继续游戏
- 两人都最优策略,先手尽可能最大化分差,后手尽可能最小化分差
求先手与后手的最终分差

核心思路(逆向DP)

设:

- dp[i] :从下标 i 开始剩余石子,当前玩家能拿到的最大分差
- 前缀和 preSum[i] :前 i 个石子总和

状态转移:

1. 从后往前遍历
2. 当前玩家两种选择:- 直接拿前 i+1 个(≥2),收益 preSum[i+1] - dp[i+1]
- 不拿,继承后面最优 dp[i+1]
3. 取最大值: dp[i] = max(preSum[i+1] - dp[i+1], dp[i+1])

答案: dp[1] (至少拿2个,从下标1开始)

TypeScript 代码实现

typescript
function stoneGameVIII(stones: number[]): number {
const n = stones.length;
// 前缀和 preSum[0]=0, preSum[1]=stones[0], preSum[2]=stones[0]+stones[1]...
const preSum: number[] = new Array(n + 1).fill(0);
for (let i = 0; i < n; i++) {
preSum[i + 1] = preSum[i] + stones[i];
}

// dp[i] 表示从i位置开始,当前玩家最大分差
const dp: number[] = new Array(n).fill(0);
dp[n - 1] = preSum[n];

// 逆序遍历
for (let i = n - 2; i >= 1; i--) {
dp[i] = Math.max(preSum[i + 1] - dp[i + 1], dp[i + 1]);
}

return dp[1];
}

// 测试用例
console.log(stoneGameVIII([-1,2,-3,4,-5])); // 4
console.log(stoneGameVIII([7,-6,5,10,5,-2,-6])); // 13
console.log(stoneGameVIII([-10,-12])); // -22


空间优化(一维压缩 O(1))

不需要完整 dp 数组,只用一个变量记录后一项即可:

typescript
function stoneGameVIII(stones: number[]): number {
const n = stones.length;
let preSum = new Array(n + 1).fill(0);
for (let i = 0; i < n; i++) {
preSum[i + 1] = preSum[i] + stones[i];
}

let nextDp = preSum[n];
for (let i = n - 2; i >= 1; i--) {
nextDp = Math.max(preSum[i + 1] - nextDp, nextDp);
}
return nextDp;
}


复杂度

- 时间:O(n)
- 空间:O(n)(前缀和),优化后可再压缩前缀和到 O(1) 边算边推

需要我给你推导一遍DP状态转移的博弈论逻辑,或者手写一遍递归+记忆化版本吗?

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

10个提升数据科学效率的Python单行代码技巧

1. 10个提升数据科学工作流的Python单行代码作为一名数据科学家&#xff0c;我每天都要处理各种数据清洗、转换和分析任务。在多年的实践中&#xff0c;我发现Python的单行代码能极大提升工作效率。今天分享的这些技巧都是我在实际项目中反复验证过的&#xff0c;特别适合需要快…

作者头像 李华
网站建设 2026/4/26 4:07:16

ToolJet开源低代码平台:从架构原理到企业级应用实战

1. 项目概述&#xff1a;一个被低估的低代码开发平台如果你是一名开发者&#xff0c;或者在企业里负责数字化工具搭建&#xff0c;大概率听过“低代码”这个词。这几年&#xff0c;低代码平台层出不穷&#xff0c;但很多要么功能太重、学习曲线陡峭&#xff0c;要么过于封闭、扩…

作者头像 李华
网站建设 2026/4/26 3:57:58

AMBA总线桥接技术BP136的设计与验证实践

1. AMBA总线桥接技术背景解析在复杂SoC设计中&#xff0c;AMBA总线架构作为ARM体系下的核心互连标准&#xff0c;其演进历程直接反映了处理器性能与系统复杂度的提升轨迹。2003年推出的AMBA3 AXI协议相比1999年发布的AMBA2 AHB&#xff0c;在突发传输、多主设备支持等方面实现了…

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

专业音频频谱分析实战:3个场景深度掌握Spek工具

专业音频频谱分析实战&#xff1a;3个场景深度掌握Spek工具 【免费下载链接】spek Acoustic spectrum analyser 项目地址: https://gitcode.com/gh_mirrors/sp/spek Spek是一款基于C开发的专业声学频谱分析工具&#xff0c;集成了FFmpeg音频解码库和wxWidgets图形界面&a…

作者头像 李华
网站建设 2026/4/26 3:50:26

FLUX.1-Krea-Extracted-LoRA入门指南:Streamlit UI响应延迟高时的排查路径

FLUX.1-Krea-Extracted-LoRA入门指南&#xff1a;Streamlit UI响应延迟高时的排查路径 1. 引言 1.1 关于FLUX.1-Krea-Extracted-LoRA FLUX.1-Krea-Extracted-LoRA是一款专为真实感图像生成设计的模型&#xff0c;它从FLUX.1-Krea-dev基础模型中提取了LoRA风格权重。这个模型…

作者头像 李华
网站建设 2026/4/26 3:49:33

HyperAgent:基于LLM的智能浏览器自动化工具实战指南

1. 项目概述与核心价值如果你和我一样&#xff0c;曾经为了写一个网页自动化脚本&#xff0c;在Playwright或Puppeteer那冗长的选择器&#xff08;Selector&#xff09;和复杂的等待逻辑里挣扎过&#xff0c;那么HyperAgent的出现&#xff0c;绝对会让你眼前一亮。简单来说&…

作者头像 李华