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. 数组异或操作(Java/c++ 暴力模拟)
LeetCode1486. 数组异或操作(Java/c++ 暴力模拟)