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[n1]=a[n1]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[n1]

时间复杂度: 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——解码异或后的排列

leetcode1734. 解码异或后的排列

leetcode1734. 解码异或后的排列

LeetCode 1734 解码异或后的排列[数学] HERODING的LeetCode之路

我用java刷 leetcode 1734. 解码异或后的排列

LeetCode1734. 解码异或后的排列 / 剑指 Offer 36. 二叉搜索树与双向链表 / 剑指 Offer 37. 序列化二叉树