滴滴校招-xor-java
2017-09-10 本文已影响0人
Jacinth
package didi;
/*解题思路:
*一个数组划分成多个连续的子数组,然后保证每个子数组里的数字进行异或后为0,
*如果子数组里只有一个元素0,也认为是符号题目要求的,让你求最多可以划分出多
*少个这样的子数组。
*从当前的index从后往前累积异或,用来判断是否是某个区间的终点,一旦为0就break了.
*从前往后每次都要异或其他项,比如4 0 2 2,每次都要异或4那就没有结果了.*/
import java.util.*;
public class xor {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
int lastId = 0;
int count = 0;
for (int i = 0; i < n; i++) {
int temp = 0;
for (int j = i; j >= lastId; j--) {// 从当前的index从后往前累积异或,
// 用来判断是否是某个区间的终点,一
// 旦为0就break了.
temp = temp ^ a[j];
if (temp == 0) {
lastId = i + 1;
count++;
break;
}
}
}
System.out.println(count);
}
}