LeetCode 每日一题笔记 日期:2026.04.08 题目:3653. 区间乘法查询后的异或一
LeetCode 每日一题笔记0. 前言日期2026.04.08题目3653. 区间乘法查询后的异或一难度中等标签数组、模拟、数学、暴力遍历题目标了分治但本题数据小暴力可过1. 题目理解问题描述给你一个数组nums和一组查询queries。每个查询格式[l, r, k, v]操作规则从下标l开始每次k跳步只要下标 ≤ r就执行nums[idx] nums[idx] * v % MOD所有查询执行完返回数组全部元素异或结果示例输入nums [1,1,1]queries [[0,2,1,4]]执行0 → 1 → 2 都 ×4 → [4,4,4]异或4 ^ 4 ^ 4 42. 解题思路核心观察题目操作非常明确按步长跳着乘数据范围不大直接模拟遍历即可 AC不需要线段树/分块必须取模MOD 1e97最后异或所有元素输出答案暴力模拟思路最直观、最稳遍历每一条查询从l开始按stepk跳着遍历到r每个位置都做nums[i] nums[i] * v % MOD全部操作结束后遍历数组求整体异或算法步骤遍历所有查询对每个查询l, r, step, validx 从 l 开始每次 step直到 r对每个 idxnums[idx] nums[idx] * val % MOD全部查询结束遍历数组求异或返回结果3. 代码实现packagecom.sheeta1998.lec.lc3653;classSolution{finalintMOD1000000007;publicintxorAfterQueries(int[]nums,int[][]queries){// 处理每一条查询for(int[]q:queries){intlq[0];intrq[1];intstepq[2];intvq[3];// 按 step 跳着更新for(intidxl;idxr;idxstep){// 强转 long 防止 int 溢出nums[idx](int)((long)nums[idx]*v%MOD);}}// 计算全部异或intxor0;for(intnum:nums){xor^num;}returnxor;}}4. 代码优化说明把 while 改成 for更简洁、更安全、不易死循环强转 long 再取模避免 int 相乘溢出增强 for 遍历查询代码更清爽异或从 0 开始不用处理边界0 异或任何数 自身5. 复杂度分析时间复杂度O(q * 平均每个查询更新的数量 n)本题数据小暴力完全能过。空间复杂度O(1)只使用了几个临时变量6. 总结为什么不能用更高级算法分治/线段树因为步长 k 不固定每个查询跳的位置不规则无法用区间批量更新只能逐个位置更新所以本题模拟就是最优解本题核心要点按步长跳着更新idx k每次乘法必须取模1e97乘法要转 long防止 int 溢出最后整体异或输出答案直接模拟即可 AC不需要复杂数据结构
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2503767.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!