新闻详情

新闻详情

首页 / 资讯中心 / 详情

Kimi LeetCode 3525. 求出数组的 X 值 II Python3实现

发布时间:2026/9/10 11:09:33来源:尧图网络
Kimi    LeetCode 3525. 求出数组的 X 值 II Python3实现
以下是 LeetCode 3525 求出数组的 X 值 II 的 Python3 实现核心思路是线段树维护区间前缀积的模分布。思路概述- 对于每个查询先单点修改 nums[index]再移除前缀保留 [start..]最后可以删除任意后缀即保留任意非空前缀。- 因此每个查询的答案等价于在子数组 nums[start..] 的所有非空前缀中乘积模 k 等于 x 的个数。- 由于 k ≤ 5线段树每个节点只需维护- prod区间整体乘积模 k- cntcnt[m] 表示该区间内有多少个非空前缀的乘积模 k 等于 m- 合并两个子区间时右子树的前缀需要乘上左子树的总积再模 k。复杂度- 时间O((n q) · k² · log n)由于 k ≤ 5实际约为 O((n q) log n)- 空间O(n)完整代码pythonclass Node:__slots__ (prod, cnt)def __init__(self):self.prod 1 # 区间乘积 % kself.cnt [0] * 5 # cnt[m] 非空前缀中乘积 % k m 的个数class SegTree:def __init__(self, nums, k):self.n len(nums)self.k kself.tree [Node() for _ in range(self.n * 4)]self.build(1, 0, self.n - 1, nums)def build(self, node, l, r, nums):if l r:v nums[l] % self.kself.tree[node].prod vself.tree[node].cnt [0] * 5self.tree[node].cnt[v] 1returnmid (l r) 1self.build(node 1, l, mid, nums)self.build(node 1 | 1, mid 1, r, nums)self.pull(node)def merge(self, left, right):res Node()res.prod (left.prod * right.prod) % self.k# 左区间的前缀直接保留for i in range(self.k):res.cnt[i] left.cnt[i]# 右区间的前缀需要乘上左区间的总积for i in range(self.k):if right.cnt[i]:new_mod (left.prod * i) % self.kres.cnt[new_mod] right.cnt[i]return resdef pull(self, node):self.tree[node] self.merge(self.tree[node 1], self.tree[node 1 | 1])def update(self, node, l, r, idx, val):if l r:v val % self.kself.tree[node].prod vself.tree[node].cnt [0] * 5self.tree[node].cnt[v] 1returnmid (l r) 1if idx mid:self.update(node 1, l, mid, idx, val)else:self.update(node 1 | 1, mid 1, r, idx, val)self.pull(node)def query(self, node, l, r, ql, qr):if ql l and r qr:return self.tree[node]mid (l r) 1if qr mid:return self.query(node 1, l, mid, ql, qr)if ql mid:return self.query(node 1 | 1, mid 1, r, ql, qr)left self.query(node 1, l, mid, ql, qr)right self.query(node 1 | 1, mid 1, r, ql, qr)return self.merge(left, right)class Solution:def resultArray(self, nums: List[int], k: int, queries: List[List[int]]) - List[int]:n len(nums)# 预处理所有数先对 k 取模nums [x % k for x in nums]seg SegTree(nums, k)ans []for q in queries:idx, val, start, x qval % kseg.update(1, 0, n - 1, idx, val)res seg.query(1, 0, n - 1, start, n - 1)ans.append(res.cnt[x])return ans关键点说明1. cnt 的含义每个节点维护的是从该区间左端点开始的所有非空前缀的模分布。这样查询任意子区间时递归返回的子节点天然满足从左端点开始的要求合并时只需把右子树的前缀乘上左子树的总积即可。2. k ≤ 5 的利用cnt 数组固定开 5实际只用前 k 个合并时的双重循环最多 25 次运算常数极小。3. 单点更新修改叶子后自底向上 pull保持每个节点的 prod 和 cnt 正确。4. 预处理取模建树前和更新时都把数值对 k 取模避免大数运算。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

mise bootstrap packages brew untap 命令完全指南:从配置中移除 Homebrew Tap 2026/9/11 5:34:11

mise bootstrap packages brew untap 命令完全指南:从配置中移除 Homebrew Tap

mise bootstrap packages brew untap 命令完全指南:从配置中移除 Homebrew Tap 【免费下载链接】mise dev tools, env vars, task runner 项目地址: https://gitcode.com/GitHub_Trending/mi/mise 本指南围绕 mise 的 mise bootstrap packages brew untap 命…

阅读更多 →
基于原生NodeJS的Agent Memory实现与优化实践 2026/9/11 5:34:11

基于原生NodeJS的Agent Memory实现与优化实践

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

阅读更多 →
AI辅助遗留Java重构:安全迭代实战指南 2026/9/11 5:34:11

AI辅助遗留Java重构:安全迭代实战指南

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

阅读更多 →
2026国产实时计算平台选型指南:从Flink到湖仓管控全链路解析 2026/9/11 5:34:11

2026国产实时计算平台选型指南:从Flink到湖仓管控全链路解析

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

阅读更多 →
Abaqus刚体建模:解析与离散刚体的选择与应用 2026/9/11 5:34:11

Abaqus刚体建模:解析与离散刚体的选择与应用

1. 解析刚体与离散刚体的基础概念在Abaqus有限元分析中,刚体(Rigid Body)是一种特殊的部件类型,它不会发生任何变形。刚体在仿真过程中保持形状不变,只有平移和旋转自由度。Abaqus提供了两种主要的刚体建模方式&#x…

阅读更多 →
pmap 命令详解:用 SerenityOS 的 pmap 剖析进程虚拟内存映射 2026/9/11 5:31:10

pmap 命令详解:用 SerenityOS 的 pmap 剖析进程虚拟内存映射

pmap 命令详解:用 SerenityOS 的 pmap 剖析进程虚拟内存映射 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 pmap 是 SerenityOS 提供的一个命令行实用工具&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞