1310. XOR Queries of a Subarray 异或!!!

题目链接:戳我

在解决此题之前,先了解异或的性质。
异或就是不进位加法。
x^x=0
x^0=x

ok,知道这个就可以解决这个问题了。
其实从[2,4] 就相当于把0-1的数字与0-4的数字一起异或。结果就会导致0-1的数字全部消去。只剩下2-4数字的异或和。
例如:arr = [1,3,4,8,9], queries =[2,4]
相当于(1 ^ 3 ) ^ (1 ^ 3 ^ 4 ^ 8 ^ 9) = 4 ^ 8 ^ 9
知道了这个,就简单了,直接先遍历一遍arr,求出arr[0->i]的异或和就可以了
不多说,看代码吧

class Solution {
public:
	vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {
		//利用异或的重要性质,x^x=0,x^0=0 就可以了
		ios_base::sync_with_stdio(false);
		cin.tie(NULL);
		vector<int> ans;
		int index1,index2;
		for (int i = 1; i < arr.size();++i) 
			arr[i] ^= arr[i - 1];
		//那么求[1,2]就相当于arr[1-1]^arr[2] 对于[0,1],就直接是arr[1]
		for (int i = 0; i < queries.size(); ++i) {
			 index1 = queries[i][0];
			 index2 = queries[i][1];
			 if (index1 > 0) ans.push_back((arr[index1 - 1] ^ arr[index2]));
			 else ans.push_back(arr[index2]);
		}
		return ans;
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值