LeetCode 1486 数组异或操作[位运算 数学] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1486 数组异或操作[位运算 数学] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
解题思路:
单纯从题意来说,一个for循环就可以解决所有问题,时间复杂度O(n),空间复杂度O(1),代码如下:

class Solution {
public:
    int xorOperation(int n, int start) {
        int ans = start;
        for(int i= 1; i < n; i ++) {
            ans ^= start + 2 * i;
        }
        return ans;
    }
};

这样就完事了,当然不行, 时间复杂度还是可以优化的,通过数学推导可以发现其中的规律,最后可以优化到O(1),具体推导过程见官方题解,代码如下:

class Solution {
public:
    int sumXor(int x) {
        if (x % 4 == 0) {
            return x;
        }
        if (x % 4 == 1) {
            return 1;
        }
        if (x % 4 == 2) {
            return x + 1;
        }
        return 0;
    }

    int xorOperation(int n, int start) {
        int s = start >> 1, e = n & start & 1;
        int ret = sumXor(s - 1) ^ sumXor(s + n - 1);
        return ret << 1 | e;
    }
};


/*作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/xor-operation-in-an-array/solution/shu-zu-yi-huo-cao-zuo-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/

以上是关于LeetCode 1486 数组异或操作[位运算 数学] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode1486. 数组异或操作

LeetCode1486. 数组异或操作(Java/c++ 暴力模拟)

LeetCode1486. 数组异或操作(Java/c++ 暴力模拟)

python描述 LeetCode 1486. 数组异或操作

LeetCode 1486.数组异或操作

我用java刷 leetcode 1486. 数组异或操作