package com.heu.wsq.leetcode.prefix_sum;
/**
* 1310. 子数组异或查询
* @author wsq
* @date 2021/5/12
* 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。
* 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor ... xor arr[Ri])作为本次查询的结果。
* 并返回一个包含给定查询 queries 所有结果的数组。
*
* 示例 1:
* 输入:arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]]
* 输出:[2,7,14,8]
* 解释:
* 数组中元素的二进制表示形式是:
* 1 = 0001
* 3 = 0011
* 4 = 0100
* 8 = 1000
* 查询的 XOR 值为:
* [0,1] = 1 xor 3 = 2
* [1,2] = 3 xor 4 = 7
* [0,3] = 1 xor 3 xor 4 xor 8 = 14
* [3,3] = 8
*
* 链接:https://leetcode-cn.com/problems/xor-queries-of-a-subarray
*/
public class XorQueries {
/**
* 类似前缀和的思想
* 1. 首先求得到达每个索引对应的前缀和的数组
* 2. 根据queries数组中元素项的起始位置和终止位置求得对应的范围的元素的异或值
* @param arr
* @param queries
* @return
*/
public int[] xorQueries(int[] arr, int[][] queries) {
if(arr == null || arr.length == 0){
return arr;
}
// 求得前缀异或值
int[] f = new int[arr.length];
f[0] = arr[0];
for(int i = 1; i < arr.length; i++){
f[i] = f[i - 1] ^ arr[i];
}
// 根据查询的左右索引获取对应范围的元素异或值
int n = queries.length;
int[] ans = new int[n];
for(int i = 0; i < n; i++){
int[] op = queries[i];
int left = op[0];
int right = op[1];
if(left == 0){
ans[i] = f[right];
}else{
ans[i] = f[right] ^ f[left - 1];
}
}
return ans;
}
}
相关推荐
new delete 详解
常规的new 和 delete 当需要内存时,可以使用new申请内存,但在用完内存时应当使用delete 去归还内存,以防止内存泄漏,具体使用方案见下面代码: int* ps = new int ; // 使用new 申明变量空间 ... ... delete ps ; '// delete 删除所申明的变量空间 上述代码将删除ps 指针指向的内存空间,但不会删除指针本身,即仍然可以使用该指针去指向其他int 类型的变量。new 和 delete 一定需要成对的使用否则极易发生内存泄漏。 注意:不
子数组异或查询
有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。并返回一个包含给定查询 queries 所有结果的数组。 示例 1: 输入:arr = [1,3,4,8], qu...
CarPlay盒子选购避坑指南:为什么你的车机破解了却用不了?从USB设备ID说起
本文深入解析CarPlay盒子硬件兼容性问题,从USB设备ID匹配到车机适配逻辑,揭示破解成功却无法使用的根本原因。通过分析USB设备识别的核心要素和逆向工程usb_device_manager.xml文件,提供三种主流解决方案对比,并强调操作中的硬件保护机制,帮助车主避免常见陷阱。
python异或查询脚本
当过被滤掉字母时,我们可以使用异或运算的方法来拼写字母 我们可以利用脚本查看哪两个字符进行异或可以组成目标字符 使用效果: key = input("Input key:") for i in range(0,127): for j in range(0,127): result=i^j if(chr(result) is key ): print('("'+chr(i)+'"^"'+chr(j)+'")=='+chr(result)+'
机器学习实例(预测房价中位数)(附代码)
1、下载数据: 下载一个压缩文件housing.tgz即可,其包含housing.csv(已经包含书有数据。),用 tax xzf housing.tgz 来解压提取CSV文件。 import os import tarfile import urllib.request DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/" HOUSING_PATH = os.path.join("datasets",
畅游Diffusion数字人(20):FLAME代码解读与实现
之前的博客《畅游Diffusion数字人(17):更强大的人脸和表情表达方法 FLAME:Learning a model of facial shape and expression》讲解了FLAME的原理,这篇博客主要讲解一下FLAME的代码实现。
3种算法 - 子数组异或查询
使用三种算法实现,子数组异或查询的问题...
STM32实战开发(128):智能位移检测 - 使用STM32实现位移检测
STM32作为一款功能强大的微控制器,由于其出色的处理能力、丰富的外设接口和低功耗特点,成为实现智能位移检测系统的理想选择。未来,可以通过结合更多传感器、多种数据处理算法以及云平台技术,进一步提升系统的智能化水平,优化位移测量的精度和稳定性。本篇博客将介绍如何使用STM32微控制器实现智能位移检测系统,涉及硬件设计、传感器选择、软件开发等多个方面,提供详细的设计步骤,并给出完整的代码示例,帮助开发者快速搭建智能位移检测系统。蜂鸣器连接到STM32的GPIO端口,当位移超过设定的阈值时,蜂鸣器发出警报。
1310. 子数组异或查询
题目链接:https://leetcode-cn.com/problems/xor-queries-of-a-subarray/ 思路:首先明确异或的运算规则0^0 = 0 , 1^1 =0 , 0^1 = 1^0 = 1。所以我们能知道两个相同的数异或是0,所以统计一下前缀异或的值即可。当给到l到r的时候只需要前缀位置是r的那个数异或前缀位置是l-1的那个数即可(这样意思就是说前r个数异或前l-1个数,这样前l-1个数异或了两边正好是0,这样就只剩下l到r异或的值了)。需要特判0到r的情况,0到r返回前
[从零开始学习FPGA编程-18]:快速入门篇 - 操作步骤2-6- VerilogHDL时序电路语法分析(以计数器为例)
目录前言:第1章 功能模块代码:counter.v第2章 驱动代码:tcounter.v前文以及阐述了VerilogHDL基本语法,本文将以modelsim自带的计数器程序来解读VerilogHDL的语法。代码路径:
使用MATLAB结合EasySpin进行ESR模拟的详细步骤及示例代码
安装EasySpin:确保你已经安装了EasySpin工具箱,它可以帮助你进行ESR模拟。你可以从EasySpin的官方网站(https://easyspin.org/)下载并安装。准备实验数据:将实验得到的EPR数据整理成合适的格式,一般包含磁场(Magnetic Field)和信号强度(Intensity)两列。进行模拟:使用EasySpin的函数对单线态氧自由基和超氧自由基进行模拟。调整参数:通过调整模拟参数,使模拟得到的峰型和峰位置与实验数据尽可能匹配。导出数据。
Leetcode 1310. 子数组异或查询 (前缀和思想)
class Solution { public: vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) { vector<int> res; int n = arr.size(); vector<int> preXOR(n + 1); for(in...
【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南
【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南
前缀和题目:子数组异或查询
因此计算子数组的元素按位异或时,不能使用遍历子数组的做法,而是需要使用时间复杂度更低的做法。可以使用前缀和的思想实现。这道题要求对于每个查询计算子数组的元素按位异或。一次计算每个查询的结果,每个查询的计算时间是。一次计算前缀异或数组,需要遍历数组。的长度以及查询的个数最大为。一次计算得到前缀异或数组。的前缀异或,即下标范围。标题:子数组异或查询。根据按位异或的性质,
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
LeetCode 1310 子数组异或查询,Java解法参考
LeetCode 1310 子数组异或查询,Java解法参考题目描述思路 1思路代码执行结果写在最后 题目描述 难度: 中等 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。 并返回一个包含给定查询 queries 所有结果的数组。 示例 1: 输入: arr = [1,
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
LeetCode 1310. 子数组异或查询
有一个正整数数组arr,现给你一个对应的查询数组queries,其中。对于每个查询i,请你计算从Li到Ri的值(即)作为本次查询的结果。并返回一个包含给定查询queries所有结果的数组。[2,7,14,8]数组中元素的二进制表示形式是:1 = 00013 = 00114 = 01008 = 1000查询的 XOR 值为:[3,3] = 8[8,0,4,4]提示 1提示 2。
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
1310. 子数组异或查询 异或 前缀和 python
例如,对于数组$a_1,a_2,a_3,a_4,a_5,a_6$,其前缀异或数组为$b_1,b_2,b_3,b_4,b_5,b_6$。如果要计算子段$a_3,a_4,a_5$的异或值,可以通过$b_5\oplus b_2$来得到,因为$b_5$是$a_1\oplus a_2\oplus a_3\oplus a_4\oplus a_5$的异或值,$b_2$是$a_1\oplus a_2$的异或值,所以$b_5\oplus b_2$就是$a_3\oplus a_4\oplus a_5$的异或值。
LeetCode 1310. 子数组异或查询(前缀异或)
1. 题目 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。 并返回一个包含给定查询 queries 所有结果的数组。 示例 1: 输入:arr = [1,3,4...
力扣每日一题:1310. 子数组异或查询
目录题目:1310. 子数组异或查询示例1示例2提示:解题思路解题代码 题目:1310. 子数组异或查询 难度: 中等 题目: 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。 并返回一个包含给定查询 queries 所有结果的数组。 示例1 输入:arr = [1,3,
【前缀和】1310.子数组异或查询
本篇将学习前缀和OJ题子数组异或查询相关知识。
Leetcode :1310. 子数组异或查询(位运算)
1310. 子数组异或查询 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。 并返回一个包含给定查询 queries 所有结果的数组。 这道题刚开始想的就是暴力循环,找到边界后,从头到尾进行异或,果然不出所料。超时了 看了解析后了解用到前缀和,利用异或的性质,前缀和
【LeetCode】﹝前缀和ி﹞一维、二维前缀和应用
【LeetCode】﹝前缀和ி﹞一维、二维前缀和应用 文章目录【LeetCode】﹝前缀和ி﹞一维、二维前缀和应用在区间范围内统计奇数数目★区域和检索 - 数组不可变★★子数组异或查询★★定长子串中元音的最大数目★★生存人数★★二维区域和检索 - 矩阵不可变★★矩阵区域和★★矩形区域不超过 K 的最大数值和★★★ 在区间范围内统计奇数数目★ 1523. 在区间范围内统计奇数数目 【题目】给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。 【示例】 输入:l
leetcode: 1310. 子数组异或查询
链接:https://leetcode-cn.com/problems/xor-queries-of-a-subarray/ 先计算异或前缀和,这样查询时就可以在O(1)O(1)O(1)时间复杂度得出答案。 C++代码: class Solution { public: vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) { vec
【LeetCode】第1310题——子数组异或查询(难度:中等)
【LeetCode】第1310题——子数组异或查询(难度:中等)题目描述解题思路代码详解注意点 题目描述 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。 并返回一个包含给定查询 queries 所有结果的数组。 示例 1: 输入:arr = [1,3,4,8], qu
力扣 1310. 子数组异或查询
力扣 1310. 子数组异或查询 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。 并返回一个包含给定查询 queries 所有结果的数组。 示例 1: 输入:arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]] 输出:
6938



被折叠的 条评论
为什么被折叠?



