概述
定义数组的异或和的概念:
数组中所有的数异或起来,得到的结果叫做数组的异或和,比如数组{3,2,1}的异或和是,321 = 0
【题目】给定一个数组arr,你可以任意把arr分成很多不相容的子数组,你的目的是:分出来的子数组中,异或和为0的子数组最多。
请返回:分出来的子数组中,异或和为0的子数组最多是多少?
public class MostXOR {
public static int mostXOR(int[] arr) {
int ans = 0;
int xor = 0;
HashMap<Integer, Integer> map = new HashMap<>();
map.put(0, -1);
int[] dp = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
xor ^= arr[i];
if (map.containsKey(xor)) {
int pre = map.get(xor);
dp[i] = pre == -1 ? 1 : dp[pre] + 1;
}
if (i > 0) {
dp[i] = Math.max(dp[i], dp[i - 1]);
}
map.put(xor, i);
ans = Math.max(ans, dp[i]);
}
return ans;
}
}
最后
以上就是震动水池为你收集整理的数组的异或和的全部内容,希望文章能够帮你解决数组的异或和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复