Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e94c71b

Browse files
committed
feat: add solutions to lc problem: No.1734
No.1734.Decode XORed Permutation
1 parent 6844d90 commit e94c71b

File tree

6 files changed

+93
-70
lines changed

6 files changed

+93
-70
lines changed

‎solution/1700-1799/1734.Decode XORed Permutation/README.md‎

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@
4141

4242
<!-- 这里可写通用的实现逻辑 -->
4343

44+
**方法一:位运算**
45+
46+
我们注意到,数组 $perm$ 是前 $n$ 个正整数的排列,因此 $perm$ 的所有元素的异或和为 1ドル \oplus 2 \oplus \cdots \oplus n,ドル记为 $a$。而 $encode[i]=perm[i] \oplus perm[i+1],ドル如果我们将 $encode[0],encode[2],\cdots,encode[n-3]$ 的所有元素的异或和记为 $b,ドル则 $perm[n-1]=a \oplus b$。知道了 $perm$ 的最后一个元素,我们就可以通过逆序遍历数组 $encode$ 求出 $perm$ 的所有元素。
47+
48+
时间复杂度 $O(n),ドル其中 $n$ 为数组 $perm$ 的长度。忽略答案数组的空间消耗,空间复杂度 $O(1)$。
49+
4450
<!-- tabs:start -->
4551

4652
### **Python3**
@@ -54,12 +60,13 @@ class Solution:
5460
a = b = 0
5561
for i in range(0, n - 1, 2):
5662
a ^= encoded[i]
57-
for i in range(n + 1):
63+
for i in range(1, n + 1):
5864
b ^= i
59-
ans = [a ^ b]
60-
for e in encoded[::-1]:
61-
ans.append(ans[-1] ^ e)
62-
return ans[::-1]
65+
perm = [0] * n
66+
perm[-1] = a ^ b
67+
for i in range(n - 2, -1, -1):
68+
perm[i] = encoded[i] ^ perm[i + 1]
69+
return perm
6370
```
6471

6572
### **Java**
@@ -68,23 +75,21 @@ class Solution:
6875

6976
```java
7077
class Solution {
71-
7278
public int[] decode(int[] encoded) {
7379
int n = encoded.length + 1;
74-
int[] ans = new int[n];
75-
int a = 0;
76-
int b = 0;
80+
int a = 0, b = 0;
7781
for (int i = 0; i < n - 1; i += 2) {
7882
a ^= encoded[i];
7983
}
80-
for (int i = 0; i < n +1; ++i) {
84+
for (int i = 1; i <= n; ++i) {
8185
b ^= i;
8286
}
83-
ans[n - 1] = a ^ b;
87+
int[] perm = new int[n];
88+
perm[n - 1] = a ^ b;
8489
for (int i = n - 2; i >= 0; --i) {
85-
ans[i] = ans[i +1] ^ encoded[i];
90+
perm[i] = encoded[i] ^ perm[i +1];
8691
}
87-
return ans;
92+
return perm;
8893
}
8994
}
9095
```
@@ -96,13 +101,19 @@ class Solution {
96101
public:
97102
vector<int> decode(vector<int>& encoded) {
98103
int n = encoded.size() + 1;
99-
vector<int> ans(n);
100104
int a = 0, b = 0;
101-
for (int i = 0; i < n - 1; i += 2) a ^= encoded[i];
102-
for (int i = 0; i < n + 1; ++i) b ^= i;
103-
ans[n - 1] = a ^ b;
104-
for (int i = n - 2; i >= 0; --i) ans[i] = ans[i + 1] ^ encoded[i];
105-
return ans;
105+
for (int i = 0; i < n - 1; i += 2) {
106+
a ^= encoded[i];
107+
}
108+
for (int i = 1; i <= n; ++i) {
109+
b ^= i;
110+
}
111+
vector<int> perm(n);
112+
perm[n - 1] = a ^ b;
113+
for (int i = n - 2; ~i; --i) {
114+
perm[i] = encoded[i] ^ perm[i + 1];
115+
}
116+
return perm;
106117
}
107118
};
108119
```
@@ -112,19 +123,19 @@ public:
112123
```go
113124
func decode(encoded []int) []int {
114125
n := len(encoded) + 1
115-
ans := make([]int, n)
116126
a, b := 0, 0
117127
for i := 0; i < n-1; i += 2 {
118128
a ^= encoded[i]
119129
}
120-
for i := 0; i < n+1; i++ {
130+
for i := 1; i <= n; i++ {
121131
b ^= i
122132
}
123-
ans[n-1] = a ^ b
133+
perm := make([]int, n)
134+
perm[n-1] = a ^ b
124135
for i := n - 2; i >= 0; i-- {
125-
ans[i] = ans[i+1] ^ encoded[i]
136+
perm[i] = encoded[i] ^ perm[i+1]
126137
}
127-
return ans
138+
return perm
128139
}
129140
```
130141

‎solution/1700-1799/1734.Decode XORed Permutation/README_EN.md‎

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,13 @@ class Solution:
4848
a = b = 0
4949
for i in range(0, n - 1, 2):
5050
a ^= encoded[i]
51-
for i in range(n + 1):
51+
for i in range(1, n + 1):
5252
b ^= i
53-
ans = [a ^ b]
54-
for e in encoded[::-1]:
55-
ans.append(ans[-1] ^ e)
56-
return ans[::-1]
53+
perm = [0] * n
54+
perm[-1] = a ^ b
55+
for i in range(n - 2, -1, -1):
56+
perm[i] = encoded[i] ^ perm[i + 1]
57+
return perm
5758
```
5859

5960
### **Java**
@@ -62,20 +63,19 @@ class Solution:
6263
class Solution {
6364
public int[] decode(int[] encoded) {
6465
int n = encoded.length + 1;
65-
int[] ans = new int[n];
66-
int a = 0;
67-
int b = 0;
66+
int a = 0, b = 0;
6867
for (int i = 0; i < n - 1; i += 2) {
6968
a ^= encoded[i];
7069
}
71-
for (int i = 0; i < n +1; ++i) {
70+
for (int i = 1; i <= n; ++i) {
7271
b ^= i;
7372
}
74-
ans[n - 1] = a ^ b;
73+
int[] perm = new int[n];
74+
perm[n - 1] = a ^ b;
7575
for (int i = n - 2; i >= 0; --i) {
76-
ans[i] = ans[i +1] ^ encoded[i];
76+
perm[i] = encoded[i] ^ perm[i +1];
7777
}
78-
return ans;
78+
return perm;
7979
}
8080
}
8181
```
@@ -87,13 +87,19 @@ class Solution {
8787
public:
8888
vector<int> decode(vector<int>& encoded) {
8989
int n = encoded.size() + 1;
90-
vector<int> ans(n);
9190
int a = 0, b = 0;
92-
for (int i = 0; i < n - 1; i += 2) a ^= encoded[i];
93-
for (int i = 0; i < n + 1; ++i) b ^= i;
94-
ans[n - 1] = a ^ b;
95-
for (int i = n - 2; i >= 0; --i) ans[i] = ans[i + 1] ^ encoded[i];
96-
return ans;
91+
for (int i = 0; i < n - 1; i += 2) {
92+
a ^= encoded[i];
93+
}
94+
for (int i = 1; i <= n; ++i) {
95+
b ^= i;
96+
}
97+
vector<int> perm(n);
98+
perm[n - 1] = a ^ b;
99+
for (int i = n - 2; ~i; --i) {
100+
perm[i] = encoded[i] ^ perm[i + 1];
101+
}
102+
return perm;
97103
}
98104
};
99105
```
@@ -103,19 +109,19 @@ public:
103109
```go
104110
func decode(encoded []int) []int {
105111
n := len(encoded) + 1
106-
ans := make([]int, n)
107112
a, b := 0, 0
108113
for i := 0; i < n-1; i += 2 {
109114
a ^= encoded[i]
110115
}
111-
for i := 0; i < n+1; i++ {
116+
for i := 1; i <= n; i++ {
112117
b ^= i
113118
}
114-
ans[n-1] = a ^ b
119+
perm := make([]int, n)
120+
perm[n-1] = a ^ b
115121
for i := n - 2; i >= 0; i-- {
116-
ans[i] = ans[i+1] ^ encoded[i]
122+
perm[i] = encoded[i] ^ perm[i+1]
117123
}
118-
return ans
124+
return perm
119125
}
120126
```
121127

‎solution/1700-1799/1734.Decode XORed Permutation/Solution.cpp‎

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@ class Solution {
22
public:
33
vector<int> decode(vector<int>& encoded) {
44
int n = encoded.size() + 1;
5-
vector<int> ans(n);
65
int a = 0, b = 0;
7-
for (int i = 0; i < n - 1; i += 2) a ^= encoded[i];
8-
for (int i = 0; i < n + 1; ++i) b ^= i;
9-
ans[n - 1] = a ^ b;
10-
for (int i = n - 2; i >= 0; --i) ans[i] = ans[i + 1] ^ encoded[i];
11-
return ans;
6+
for (int i = 0; i < n - 1; i += 2) {
7+
a ^= encoded[i];
8+
}
9+
for (int i = 1; i <= n; ++i) {
10+
b ^= i;
11+
}
12+
vector<int> perm(n);
13+
perm[n - 1] = a ^ b;
14+
for (int i = n - 2; ~i; --i) {
15+
perm[i] = encoded[i] ^ perm[i + 1];
16+
}
17+
return perm;
1218
}
1319
};
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
func decode(encoded []int) []int {
22
n := len(encoded) + 1
3-
ans := make([]int, n)
43
a, b := 0, 0
54
for i := 0; i < n-1; i += 2 {
65
a ^= encoded[i]
76
}
8-
for i := 0; i <n+1; i++ {
7+
for i := 1; i <=n; i++ {
98
b ^= i
109
}
11-
ans[n-1] = a ^ b
10+
perm := make([]int, n)
11+
perm[n-1] = a ^ b
1212
for i := n - 2; i >= 0; i-- {
13-
ans[i] = ans[i+1] ^ encoded[i]
13+
perm[i] = encoded[i] ^ perm[i+1]
1414
}
15-
return ans
15+
return perm
1616
}
Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
class Solution {
22
public int[] decode(int[] encoded) {
33
int n = encoded.length + 1;
4-
int[] ans = new int[n];
5-
int a = 0;
6-
int b = 0;
4+
int a = 0, b = 0;
75
for (int i = 0; i < n - 1; i += 2) {
86
a ^= encoded[i];
97
}
10-
for (int i = 0; i <n + 1; ++i) {
8+
for (int i = 1; i <= n; ++i) {
119
b ^= i;
1210
}
13-
ans[n - 1] = a ^ b;
11+
int[] perm = new int[n];
12+
perm[n - 1] = a ^ b;
1413
for (int i = n - 2; i >= 0; --i) {
15-
ans[i] = ans[i + 1] ^ encoded[i];
14+
perm[i] = encoded[i] ^ perm[i + 1];
1615
}
17-
return ans;
16+
return perm;
1817
}
1918
}

‎solution/1700-1799/1734.Decode XORed Permutation/Solution.py‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ def decode(self, encoded: List[int]) -> List[int]:
44
a = b = 0
55
for i in range(0, n - 1, 2):
66
a ^= encoded[i]
7-
for i in range(n + 1):
7+
for i in range(1, n + 1):
88
b ^= i
9-
ans = [a ^ b]
10-
for e in encoded[::-1]:
11-
ans.append(ans[-1] ^ e)
12-
return ans[::-1]
9+
perm = [0] * n
10+
perm[-1] = a ^ b
11+
for i in range(n - 2, -1, -1):
12+
perm[i] = encoded[i] ^ perm[i + 1]
13+
return perm

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /