📜  在[L,R]范围内查找数字的XOR(1)

📅  最后修改于: 2023-12-03 15:07:51.681000             🧑  作者: Mango

在[L,R]范围内查找数字的XOR

简介

本文介绍如何在给定区间[L,R]内查找数字的XOR,即[L^ L+1^ L+2^ ... ^ R]。

解法一

暴力枚举,时间复杂度O(n),n为区间内数字的个数。

int XOR(int L, int R) {
    int res = L;
    for (int i = L + 1; i <= R; i++) {
        res ^= i;
    }
    return res;
}
解法二

利用性质,时间复杂度O(1)。

偶数个数字的异或结果为0,奇数个数字的异或结果为最后一个数字。因此,当[L,R]内数字的个数为偶数时,异或结果为0;否则,异或结果为[L,R]中最后一个数字。

int XOR(int L, int R) {
    int len = R - L + 1;
    if (len % 2 == 0) {
        return 0;
    } else {
        return R;
    }
}
解法三

利用XOR的性质,时间复杂度O(1)。

  • 一个数与自己XOR结果为0
  • 一个数与0 XOR结果为自己

[L,R]所有数的异或结果,等价于0到L-1所有数异或结果与0到R所有数异或结果的异或结果。因此,只需计算0到L-1所有数字的异或结果与0到R所有数字异或结果的异或值即可。

int XOR(int L, int R) {
    int res = 0;
    for (int i = 1; i < L; i++) {
        res ^= i;
    }
    for (int i = 1; i <= R; i++) {
        res ^= i;
    }
    return res;
}
参考文献