滴滴校招-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);
    }
}
上一篇下一篇

猜你喜欢

热点阅读