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

Kimi LeetCode 3743. 循环划分的最大得分 Python3实现

LeetCode 3743. 循环划分的最大得分 — Python3 实现

核心思路

这道题的关键在于将子数组范围问题转化为股票交易问题:

- 子数组的范围 = `max - min`
- 按顺序遍历一个子数组时,相当于一次"交易":在最小值处"买入",在最大值处"卖出"
- 因此问题等价于:在循环数组中最多进行 k 次交易,每次收益为价格差的绝对值,求最大总收益

循环数组的处理

循环数组需要在某处"断开"成线性数组。最优策略是:在全局最小值处断开,因为最小值天然适合作为子数组的边界(它只可能是某个子数组的起点或终点,不会夹在中间浪费得分)。

分别尝试从最小值位置和最小值后一个位置开始线性化,取最大值。

代码实现

```python
class Solution:
def maximumScore(self, nums: list[int], k: int) -> int:
n = len(nums)

def solve(base: int) -> int:
"""
将循环数组从 base 位置开始线性化,DP求解最多k次交易的最大收益。
"""
dp = [0] * (n + 1) # dp[j]: 前j个元素的最大得分
result = 0

for _ in range(k):
# x = max(dp[j] - nums[idx]): 最优"最小值起点"
# y = max(dp[j] + nums[idx]): 最优"最大值起点"
x, y = float("-inf"), float("-inf")
new_dp = [float("-inf")] * (n + 1)

for j in range(n):
idx = (base + j) % n

x = max(x, dp[j] - nums[idx])
y = max(y, dp[j] + nums[idx])

# 三种选择:
# 1. 不在j结束子数组 → new_dp[j]
# 2. 以nums[idx]为最大值结束 → x + nums[idx]
# 3. 以nums[idx]为最小值结束 → y - nums[idx]
new_dp[j + 1] = max(new_dp[j], x + nums[idx], y - nums[idx])

dp = new_dp
result = max(result, dp[-1])

return result

# 在全局最小值处断开循环数组
min_idx = min(range(n), key=lambda i: nums[i])
return max(solve(min_idx), solve(min_idx + 1))
```

复杂度分析

项目 复杂度
时间 O(n × k)
空间 O(n)(可优化至 O(k))

验证结果

输入 输出 说明
`nums=[1,2,3,3], k=2` 3 `[2,3]` 范围=1, `[3,1]` 范围=2
`nums=[1,2,3,3], k=1` 2 整个数组范围=3-1=2
`nums=[1,2,3,3], k=4` 3 可少于k个子数组
`nums=[1,5,1,5], k=2` 8 `[1,5]`×2,各得4分

下载完整代码:[leetcode_3743.py](sandbox:///mnt/agents/output/leetcode_3743.py)

http://www.jsqmd.com/news/1277759/

相关文章:

  • 企业级本地大语言模型管理架构:构建可扩展的AI部署技术方案
  • 2026年业务数据报表设计器推荐:功能与易用性解析 - 科技焦点
  • 2026年威海汽车电路维修专业服务商联系与选型指南 - 装修教育财税推荐2026
  • 终极揭秘:如何让老款Mac完美运行最新macOS系统?
  • @DateTimeFormat 与 @JsonFormat 详解
  • 拓竹A1C 3D打印机:工科生高速打印入门指南与项目实践
  • 数学建模优化水系电解液配方的核心方法与工程实践
  • 铌酸锂LNOI法诺共振仿真与优化实践
  • 微软Build 2026:Windows原生支持AI智能体,开启操作系统新范式
  • Python项目代码骨架构建与目标函数设计实践
  • Python模拟DDoS攻击与防御:本地实验环境搭建与原理剖析
  • 从滁州出发西藏,怎么选靠谱旅行社?这份避坑攻略(含西藏研学旅行社推荐)| 附:旅行社电话 - 西藏康泰旅行社
  • AI绘画工作流优化:infinite-canvas本地部署与批量出图实战
  • Obsidian模板终极指南:17个免费模板3分钟打造高效知识管理系统
  • BlackHole免费终极指南:3步解锁macOS音频魔法,彻底告别音频孤岛
  • ComfyUI+Wan2.2:AI视频生成工作流部署与电影级镜头实战
  • TPIC7710EVM评估板实战指南:从安全操作到电机驱动验证
  • 数据分析自学指南:从Excel到Python的完整技能栈与实战路径
  • 核心期刊投稿AI率卡在28%怎么办?免费3步压到10%以内,CSSCI北大核心亲测达标
  • 深度解析Qwen Code:5步实现AI编程助手的终极VS Code集成方案
  • Spring Boot设计模式实战:工厂与单例模式解析
  • Kimi LeetCode 3748. 统计稳定子数组的数目 Java实现
  • PlayIntegrityFix完整指南:解决Android设备Play Integrity认证问题的终极方案
  • DeepSWE基准测试解析:GPT-5.6 Sol与Opus 5在软件工程任务中的表现对比
  • ZotMoov 终极指南:如何高效管理 Zotero 附件,释放文献库空间
  • 2026盘点:于晓昆律师领衔的专业潍坊股权架构法律服务解析 - 装修教育财税推荐2026
  • GmSSL3配置SM2双证书全攻略:从编译到实战的避坑指南
  • PCIe-3.4/3.4.1 Flow Control Initialization Protocol-fc Initialization State Machine Rules(initFC1)
  • 转湾流水线定制厂家哪个性价比高:升级 - 品牌推广大师
  • LangGraph实战:构建高效多智能体协作系统