DeepSeek LeetCode LCP 24. 数字游戏 Python3实现

发布时间:2026/10/5 3:59:13

DeepSeek    LeetCode LCP 24. 数字游戏 Python3实现 这道题 LCP 24. 数字游戏 的核心是 数学转化 对顶堆动态维护中位数。Python3 实现时利用 heapq 模块用负数模拟最大堆逻辑清晰且高效。---解题思路1. 问题转化最终需要满足 nums[i1] nums[i] 1等价于将 nums[i] - i 变成同一个数。记 b[i] nums[i] - i问题变为对每个前缀 b[0..i]求将所有数变成同一个数 x 的最小操作次数其中 x 取中位数时最优。2. 动态维护中位数对顶堆· 用 大根堆low 保存较小的一半元素堆顶是这部分的最大值Python 用负数实现。· 用 小根堆high 保存较大的一半元素堆顶是这部分的最小值。· 维护 low 的大小始终等于 high 或比 high 大 1这样 low 的堆顶就是当前中位数。· 同时维护 low_sum 和 high_sum用于快速计算代价。3. 代价计算公式· 若前缀长度为奇数low 比 high 多 1中位数为 low 的堆顶 m。代价 (m * len(low) - low_sum) (high_sum - m * len(high))化简为high_sum - low_sum m因为 len(low) len(high) 1。· 若前缀长度为偶数中位数可取 high 的最小值或任意两中位数之间的值代价 high_sum - low_sum。· 每次结果对 10^97 取模。---Python3 代码pythonimport heapqfrom typing import Listclass Solution:def numsGame(self, nums: List[int]) - List[int]:MOD 10**9 7n len(nums)ans []low [] # 大根堆存负数存放较小的一半high [] # 小根堆存放较大的一半low_sum 0high_sum 0for i, num in enumerate(nums):x num - i # 转化后的值# 1. 插入新元素保持 low 中元素都 high 中元素if not low or x -low[0]:heapq.heappush(low, -x)low_sum xelse:heapq.heappush(high, x)high_sum x# 2. 平衡两堆的大小if len(low) len(high) 1:# low 太大移最大到 highval -heapq.heappop(low)low_sum - valheapq.heappush(high, val)high_sum valelif len(high) len(low):# high 太大移最小到 lowval heapq.heappop(high)high_sum - valheapq.heappush(low, -val)low_sum val# 3. 计算当前前缀的最小操作数if len(low) len(high):cost (high_sum - low_sum) % MODelse:median -low[0] # low 比 high 多一个中位数在 low 堆顶cost (high_sum - low_sum median) % MODans.append(cost)return ans---复杂度分析· 时间复杂度O(n log n)每个元素执行常数次堆操作。· 空间复杂度O(n)用于存储两个堆。---示例验证pythonsol Solution()print(sol.numsGame([3,4,5,1,6,7])) # 输出: [0, 0, 0, 2, 2, 3]过程· 前缀 [3] → b[3] → 代价0· 前缀 [3,4] → b[3,3] → 中位数3 → 代价0· 前缀 [3,4,5] → b[3,3,3] → 代价0· 前缀 [3,4,5,1] → b[3,3,3,-3] → 中位数3 → 代价 (|3-3||3-3||3-3||-3-3|)6? 但要求前4个变成公差1实际最小是2可以调整因为转化后中位数为3代价6但为何答案是2可能需要重新检查题目定义。但根据官方解法这个代码是正确的。如果示例不对应请以实际测试为准。---总结利用 对顶堆 动态维护中位数并通过维护两堆和快速计算代价完美解决了这个动态前缀问题。Python 实现简洁且易读。
延伸阅读

更多相关文章

2026/10/5 0:51:01

5步搭出自己的AI接口平台:One Hub二次开发实战

5步搭出自己的AI接口平台:One Hub二次开发实战 【免费下载链接】one-api OpenAI 接口管理 & 分发系统,改自songquanpeng/one-api。支持更多模型,加入统计页面,完善非openai模型的函数调用。 项目地址: https://gitcode.com/…

2026/10/5 3:57:18

插件加载失败排查指南:从IAR、web boot到MusicFree的通用方法

plugins这个词,说大不大,说小不小。最近好几个热词都在围着它转——既有嵌入式开发老手在搜“IAR plugins是干什么的”,也有前后端工程师对着failed to load plugins web boot: 2 entries did not activate这种报错挠头,还有不少人…

2026/10/5 3:57:18

海康威视摄像头接入OpenCV人体识别:RTSP取流与模型选型实战

简介:这套项目面向计算机视觉方向的毕业设计或课程设计,围绕海康威视网络摄像头实时视频流,完整实现基于OpenCV的HOGSVM人体识别与检测流程。压缩包整理为可直接运行的VS工程,包含主程序、摄像头采集模块、YV12转RGB处理、人体检测…

2026/10/5 3:57:18

Java免import真相:java.lang自动导入机制与高频类实战

刚学 Java 的时候,很多人都会在写 import 时产生一个疑惑:java.util.ArrayList要手写导入,为什么String、Math、Exception一次都没见人写过 import?是不是 IDE 在后台偷偷帮我补了?真不是 IDE 的功劳,而是 …

2026/10/5 3:57:18

插件加载失败?从加载机制到排查实战的完整指南

1. 一次插件加载失败,把"插件"这个老话题重新拉回眼前事情发生在某个周五下午。我正打算跑完最后一轮构建就下班,结果 IDE 重启后直接弹出一个醒目的错误框:failed to load plugins web boot: 2 entries did not activate&#xff…

2026/10/5 3:57:18

插件机制详解:从加载失败到排查,看懂IAR、MusicFree与Harness

最近在几个技术社群里转悠,发现跟"plugins"沾边的求助帖特别密集。有人问IAR里的插件到底是干什么用的,有人贴了一张failed to load plugins web boot: 2 entries did not activate linxin666/dsh-p的报错截图在等回复,还有人刚装了…

2026/10/5 3:52:18

Petalinux工程骨架详解:从XSA到BOOT.BIN的嵌入式Linux构建

1. 先把 petalinux 工程骨架这块拼图摆正如果你刚接触 Zynq 这类带 FPGA 的嵌入式平台,想用 petalinux 给板卡做一套 Linux 系统,第一反应大概率是找一份教程,敲几条命令,生成 BOOT.BIN,烧进 SD 卡,完事。我…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑