https://leetcode-cn.com/problems/decode-xored-permutation/
思路:由于原序列是
n
n
n
个正整数的排列,且
n
n
n
为奇数,那么我们可以得到原序列的异或和
v
1
=
1
⨁
2
⨁
.
.
.
n
v_1=1 \bigoplus 2 \bigoplus …n
v
1
=
1
⨁
2
⨁
.
.
.
n
,然后再取输入序列的奇数位置或偶数位置的异或和设为
v
2
v_2
v
2
,显然
v
1
⨁
v
2
v_1 \bigoplus v_2
v
1
⨁
v
2
就等于原序列的
a
0
a_0
a
0
或
a
n
a_n
a
n
,那么问题就解决了。
class Solution {
public:
vector<int> decode(vector<int>& encoded) {
int n=encoded.size();
vector<int> ans(n+1);
int v1=0,v2=0;
for(int i=0;i<n;i+=2)
v1^=encoded[i],v2^=(i+1)^(i+2);
v2^=n+1;
ans[n]=v1^v2;
for(int i=n-1;i>=0;i--)
ans[i]=ans[i+1]^encoded[i];
return ans;
}
};