1734. 解码异或后的排列(思维)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1734. 解码异或后的排列(思维)相关的知识,希望对你有一定的参考价值。
1734. 解码异或后的排列(思维)
思路:
1.求出 p e r m [ 0 ] perm[0] perm[0]
2.然后递推出其他。
因为 s u m = ⊕ i = 1 n i sum=\\oplus_{i=1}^n i sum=⊕i=1ni
而 n n n为奇数,所以我们可以求出 ⊕ i = 2 n a [ i ] \\oplus_{i=2}^n a[i] ⊕i=2na[i]
e n c o d e [ 2 ] = a [ 2 ] ⊕ a [ 3 ] encode[2]=a[2]\\oplus a[3] encode[2]=a[2]⊕a[3]
e n c o d e [ 4 ] = a [ 4 ] ⊕ a [ 5 ] encode[4]=a[4]\\oplus a[5] encode[4]=a[4]⊕a[5]
e n c o d e [ n − 1 ] = a [ n − 1 ] ⊕ a [ n ] encode[n-1]=a[n-1]\\oplus a[n] encode[n−1]=a[n−1]⊕a[n]
所以 ⊕ i = 2 n a [ i ] = e n c o d e [ 2 ] ⊕ e n c o d e [ 4 ] ⋯ ⊕ e n c o d e [ n − 1 ] \\oplus_{i=2}^n a[i]=encode[2]\\oplus encode[4]\\dots \\oplus encode[n-1] ⊕i=2na[i]=encode[2]⊕encode[4]⋯⊕encode[n−1]
时间复杂度: O ( n ) O(n) O(n)
class Solution {
public:
vector<int> decode(vector<int>& a) {
int n = (int)a.size()+1;
int s = 0;
for(int i=1;i<=n;i++) s^=i;
for(int i=1;i<n-1;i+=2) s^=a[i];
vector<int>ans(n);ans[0]=s;
for(int i=1;i<n;i++)
ans[i] = a[i-1] ^ ans[i-1];
return ans;
}
};
以上是关于1734. 解码异或后的排列(思维)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1734 解码异或后的排列[数学] HERODING的LeetCode之路
我用java刷 leetcode 1734. 解码异或后的排列
LeetCode1734. 解码异或后的排列 / 剑指 Offer 36. 二叉搜索树与双向链表 / 剑指 Offer 37. 序列化二叉树