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

Kimi LeetCode 3351. 好子序列的元素之和 Python3实现

```python
class Solution:
def sumOfGoodSubsequences(self, nums: List[int]) -> int:
MOD = 10**9 + 7
mx = max(nums) if nums else 0

# f[i] = 以值 i 结尾的所有好子序列的元素和
f = [0] * (mx + 1)
# g[i] = 以值 i 结尾的所有好子序列的数量
g = [0] * (mx + 1)

for x in nums:
# 1. 单独作为一个子序列
f[x] = (f[x] + x) % MOD
g[x] = (g[x] + 1) % MOD

# 2. 接在以 x-1 结尾的好子序列后面
if x > 0:
f[x] = (f[x] + f[x - 1] + g[x - 1] * x) % MOD
g[x] = (g[x] + g[x - 1]) % MOD

# 3. 接在以 x+1 结尾的好子序列后面
if x + 1 <= mx:
f[x] = (f[x] + f[x + 1] + g[x + 1] * x) % MOD
g[x] = (g[x] + g[x + 1]) % MOD

return sum(f) % MOD
```

核心思路:

- 好子序列要求相邻元素差的绝对值恰好为 1。处理数字 x 时,它可以:
1. 单独作为一个好子序列。
2. 接在所有以 x-1 结尾的好子序列后面。
3. 接在所有以 x+1 结尾的好子序列后面。

- `f[x]` 记录以值 x 结尾的所有好子序列的元素和,`g[x]` 记录对应的数量。
- 从 x-1 转移时,新增贡献为 `f[x-1] + g[x-1] * x`(原有子序列和 + 每个子序列末尾新增 x)。
- 最终答案为 `sum(f) % MOD`。

复杂度:
- 时间 O(n + M),M = \max(\text{nums})。
- 空间 O(M)。

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

相关文章:

  • 高客单价行业(房产/装修)电销机器人成功案例:话术设计与转化路径拆解
  • Altium Designer 2024 原理图高级功能:网络表比对导入PCB
  • CY5-amine Cy5标记氨基 花菁染料Cy5-氨基 CY5-NH2 结构说明
  • Python eval()函数安全风险深度解析:从CVE-2025-2945漏洞看代码注入防御
  • Web安全面试指南:从SQL注入到业务逻辑漏洞的攻防实战解析
  • NS-USBLoader:Switch玩家的终极跨平台文件管理工具
  • 金蝶AI套件在装备制造场景的4个落地应用(技术实现详解)
  • 显存不够用,ROCm 7.x 下 vLLM 的 PagedAttention 调优笔记
  • AMD MI300X 显卡上的显存优化与 PagedAttention 调优实战
  • Kyber AI 文档平台变革监管流程,18 个月营收增 40 倍邀你共创未来!
  • 台积电CoPoS封装取代CoWoS-玻璃基板产业化-AI芯片封装革命
  • 智能照明实战:解锁DALI模块的多场景适配密码与案例透视
  • 智慧校园系统一套多少钱?三大费用构成帮你算清总账
  • Python文件操作:二进制文件的读写(rb/wb模式)
  • WELearn学习助手:现代大学生的高效网课学习解决方案
  • 9.2 入门案例:简单函数调用机器人
  • 高效窗口管理神器:AlwaysOnTop让多任务处理变得简单
  • 【从0到1构建一个ClaudeAgent】规划与协调-技能
  • AI写论文新选择!4款AI论文写作工具,提升论文质量有妙招!
  • NS-USBLoader完整指南:轻松管理Switch游戏文件的终极工具
  • 舰艇(VR)虚拟仿真训练系统
  • Consul:服务发现与服务网格的一站式方案
  • 告别“脏数据”:深入解析 VoxCPM 如何让 PDF 真正为 AI 所用
  • Laravel:PHP 开发者用了就回不去的框架
  • 2026年长沙画册设计公司怎么选?业内人士的实话
  • ComfyUI Reactor Node完整指南:如何快速实现高质量AI换脸
  • Hermes Agent 一周暴涨五万 Star,但我劝你别急着追
  • 【学习笔记】大模型时代全景图:从 GPT 到 Claude/DeepSeek,一文看懂 LLM 演进史
  • 从数据标注到自研模型:
  • 高校建设人工智能实验室,到底该如何选择服务商?