新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/9 11:07:55来源:尧图网络
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

相关资讯

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

较早相关资讯

最新相关资讯

掌控习惯实操指南:用身份认同与四大法则终结三分钟热度 2026/9/9 11:04:55

掌控习惯实操指南:用身份认同与四大法则终结三分钟热度

这篇写的是《掌控习惯》书摘的第二篇。上一篇我主要梳理了这本书前半部分关于“微习惯”“复利效应”“系统与目标的关系”这些底层逻辑,发出来之后后台收到不少留言,有人说自己刚开始尝试“每天一个俯卧撑”,也有人问后半部分有没有更具体的…

阅读更多 →
Linux内核内存管理实战:从伙伴系统到OOM Killer排查调优 2026/9/9 11:04:55

Linux内核内存管理实战:从伙伴系统到OOM Killer排查调优

Linux 内核内存管理原理与实践:从伙伴系统到 OOM Killer 的实战笔记 内存管理是 Linux 内核里最核心、也最容易让人犯迷糊的模块之一。不管是做服务器运维、嵌入式开发,还是日常排查应用崩溃,最终都会落到“内存到底怎么回事”这个问题上。我…

阅读更多 →
MAX13487自动收发RS485设计:MicroPython工业通信硬件兜底方案 2026/9/9 11:04:55

MAX13487自动收发RS485设计:MicroPython工业通信硬件兜底方案

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

阅读更多 →
Linux内核模块机制详解:从insmod到rmmod的加载卸载原理与驱动开发避坑指南 2026/9/9 11:04:55

Linux内核模块机制详解:从insmod到rmmod的加载卸载原理与驱动开发避坑指南

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

阅读更多 →
视觉传感器应用版图全解析:从工业制造到智能机器人 2026/9/9 11:04:55

视觉传感器应用版图全解析:从工业制造到智能机器人

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

阅读更多 →
ECC内存错误与MBIST自检:服务器内存故障排查实战指南 2026/9/9 11:01:54

ECC内存错误与MBIST自检:服务器内存故障排查实战指南

1. 一次真实的内存故障:从“uncorrectable ECC”说起前两天巡检一台跑着数据库的物理机,系统日志里刷出来一条硬核告警,内容是“Memory ECC error detected”、“uncorrectable ECC error on DIMM_A2”,后面还跟着一串物理地址。光…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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