Skip to content

Commit 2b32b0e

Browse files
authored
feat: add solutions to lc problem: No.0760 (#4806)
1 parent 3b53270 commit 2b32b0e

File tree

7 files changed

+170
-42
lines changed

7 files changed

+170
-42
lines changed

solution/0700-0799/0760.Find Anagram Mappings/README.md

Lines changed: 63 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ tags:
5858

5959
<!-- solution:start -->
6060

61-
### 方法一
61+
### 方法一:哈希表
62+
63+
我们用一个哈希表 $\textit{d}$ 来存储数组 $\textit{nums2}$ 中每个元素及其对应的下标。然后我们遍历数组 $\textit{nums1}$,对于每个元素 $\textit{nums1}[i]$,我们从哈希表 $\textit{d}$ 中获取其对应的下标并存入结果数组中。
64+
65+
时间复杂度 $O(n)$,空间复杂度 $O(n)$,其中 $n$ 是数组的长度。
6266

6367
<!-- tabs:start -->
6468

@@ -67,29 +71,74 @@ tags:
6771
```python
6872
class Solution:
6973
def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]:
70-
mapper = defaultdict(set)
71-
for i, num in enumerate(nums2):
72-
mapper[num].add(i)
73-
return [mapper[num].pop() for num in nums1]
74+
d = {x: i for i, x in enumerate(nums2)}
75+
return [d[x] for x in nums1]
7476
```
7577

7678
#### Java
7779

7880
```java
7981
class Solution {
8082
public int[] anagramMappings(int[] nums1, int[] nums2) {
81-
Map<Integer, Set<Integer>> map = new HashMap<>();
82-
for (int i = 0; i < nums2.length; ++i) {
83-
map.computeIfAbsent(nums2[i], k -> new HashSet<>()).add(i);
83+
int n = nums1.length;
84+
Map<Integer, Integer> d = new HashMap<>(n);
85+
for (int i = 0; i < n; ++i) {
86+
d.put(nums2[i], i);
87+
}
88+
int[] ans = new int[n];
89+
for (int i = 0; i < n; ++i) {
90+
ans[i] = d.get(nums1[i]);
8491
}
85-
int[] res = new int[nums1.length];
86-
for (int i = 0; i < nums1.length; ++i) {
87-
int idx = map.get(nums1[i]).iterator().next();
88-
res[i] = idx;
89-
map.get(nums1[i]).remove(idx);
92+
return ans;
93+
}
94+
}
95+
```
96+
97+
#### C++
98+
99+
```cpp
100+
class Solution {
101+
public:
102+
vector<int> anagramMappings(vector<int>& nums1, vector<int>& nums2) {
103+
int n = nums1.size();
104+
unordered_map<int, int> d;
105+
for (int i = 0; i < n; ++i) {
106+
d[nums2[i]] = i;
90107
}
91-
return res;
108+
vector<int> ans;
109+
for (int x : nums1) {
110+
ans.push_back(d[x]);
111+
}
112+
return ans;
113+
}
114+
};
115+
```
116+
117+
#### Go
118+
119+
```go
120+
func anagramMappings(nums1 []int, nums2 []int) []int {
121+
d := map[int]int{}
122+
for i, x := range nums2 {
123+
d[x] = i
124+
}
125+
ans := make([]int, len(nums1))
126+
for i, x := range nums1 {
127+
ans[i] = d[x]
128+
}
129+
return ans
130+
}
131+
```
132+
133+
#### TypeScript
134+
135+
```ts
136+
function anagramMappings(nums1: number[], nums2: number[]): number[] {
137+
const d: Map<number, number> = new Map();
138+
for (let i = 0; i < nums2.length; ++i) {
139+
d.set(nums2[i], i);
92140
}
141+
return nums1.map(num => d.get(num)!);
93142
}
94143
```
95144

solution/0700-0799/0760.Find Anagram Mappings/README_EN.md

Lines changed: 63 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ tags:
5555

5656
<!-- solution:start -->
5757

58-
### Solution 1
58+
### Solution 1: Hash Table
59+
60+
We use a hash table $\textit{d}$ to store each element of the array $\textit{nums2}$ and its corresponding index. Then we iterate through the array $\textit{nums1}$, and for each element $\textit{nums1}[i]$, we retrieve its corresponding index from the hash table $\textit{d}$ and store it in the result array.
61+
62+
The time complexity is $O(n)$ and the space complexity is $O(n)$, where $n$ is the length of the array.
5963

6064
<!-- tabs:start -->
6165

@@ -64,29 +68,74 @@ tags:
6468
```python
6569
class Solution:
6670
def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]:
67-
mapper = defaultdict(set)
68-
for i, num in enumerate(nums2):
69-
mapper[num].add(i)
70-
return [mapper[num].pop() for num in nums1]
71+
d = {x: i for i, x in enumerate(nums2)}
72+
return [d[x] for x in nums1]
7173
```
7274

7375
#### Java
7476

7577
```java
7678
class Solution {
7779
public int[] anagramMappings(int[] nums1, int[] nums2) {
78-
Map<Integer, Set<Integer>> map = new HashMap<>();
79-
for (int i = 0; i < nums2.length; ++i) {
80-
map.computeIfAbsent(nums2[i], k -> new HashSet<>()).add(i);
80+
int n = nums1.length;
81+
Map<Integer, Integer> d = new HashMap<>(n);
82+
for (int i = 0; i < n; ++i) {
83+
d.put(nums2[i], i);
84+
}
85+
int[] ans = new int[n];
86+
for (int i = 0; i < n; ++i) {
87+
ans[i] = d.get(nums1[i]);
8188
}
82-
int[] res = new int[nums1.length];
83-
for (int i = 0; i < nums1.length; ++i) {
84-
int idx = map.get(nums1[i]).iterator().next();
85-
res[i] = idx;
86-
map.get(nums1[i]).remove(idx);
89+
return ans;
90+
}
91+
}
92+
```
93+
94+
#### C++
95+
96+
```cpp
97+
class Solution {
98+
public:
99+
vector<int> anagramMappings(vector<int>& nums1, vector<int>& nums2) {
100+
int n = nums1.size();
101+
unordered_map<int, int> d;
102+
for (int i = 0; i < n; ++i) {
103+
d[nums2[i]] = i;
87104
}
88-
return res;
105+
vector<int> ans;
106+
for (int x : nums1) {
107+
ans.push_back(d[x]);
108+
}
109+
return ans;
110+
}
111+
};
112+
```
113+
114+
#### Go
115+
116+
```go
117+
func anagramMappings(nums1 []int, nums2 []int) []int {
118+
d := map[int]int{}
119+
for i, x := range nums2 {
120+
d[x] = i
121+
}
122+
ans := make([]int, len(nums1))
123+
for i, x := range nums1 {
124+
ans[i] = d[x]
125+
}
126+
return ans
127+
}
128+
```
129+
130+
#### TypeScript
131+
132+
```ts
133+
function anagramMappings(nums1: number[], nums2: number[]): number[] {
134+
const d: Map<number, number> = new Map();
135+
for (let i = 0; i < nums2.length; ++i) {
136+
d.set(nums2[i], i);
89137
}
138+
return nums1.map(num => d.get(num)!);
90139
}
91140
```
92141

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
vector<int> anagramMappings(vector<int>& nums1, vector<int>& nums2) {
4+
int n = nums1.size();
5+
unordered_map<int, int> d;
6+
for (int i = 0; i < n; ++i) {
7+
d[nums2[i]] = i;
8+
}
9+
vector<int> ans;
10+
for (int x : nums1) {
11+
ans.push_back(d[x]);
12+
}
13+
return ans;
14+
}
15+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func anagramMappings(nums1 []int, nums2 []int) []int {
2+
d := map[int]int{}
3+
for i, x := range nums2 {
4+
d[x] = i
5+
}
6+
ans := make([]int, len(nums1))
7+
for i, x := range nums1 {
8+
ans[i] = d[x]
9+
}
10+
return ans
11+
}
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
class Solution {
22
public int[] anagramMappings(int[] nums1, int[] nums2) {
3-
Map<Integer, Set<Integer>> map = new HashMap<>();
4-
for (int i = 0; i < nums2.length; ++i) {
5-
map.computeIfAbsent(nums2[i], k -> new HashSet<>()).add(i);
3+
int n = nums1.length;
4+
Map<Integer, Integer> d = new HashMap<>(n);
5+
for (int i = 0; i < n; ++i) {
6+
d.put(nums2[i], i);
67
}
7-
int[] res = new int[nums1.length];
8-
for (int i = 0; i < nums1.length; ++i) {
9-
int idx = map.get(nums1[i]).iterator().next();
10-
res[i] = idx;
11-
map.get(nums1[i]).remove(idx);
8+
int[] ans = new int[n];
9+
for (int i = 0; i < n; ++i) {
10+
ans[i] = d.get(nums1[i]);
1211
}
13-
return res;
12+
return ans;
1413
}
15-
}
14+
}
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
class Solution:
22
def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]:
3-
mapper = defaultdict(set)
4-
for i, num in enumerate(nums2):
5-
mapper[num].add(i)
6-
return [mapper[num].pop() for num in nums1]
3+
d = {x: i for i, x in enumerate(nums2)}
4+
return [d[x] for x in nums1]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
function anagramMappings(nums1: number[], nums2: number[]): number[] {
2+
const d: Map<number, number> = new Map();
3+
for (let i = 0; i < nums2.length; ++i) {
4+
d.set(nums2[i], i);
5+
}
6+
return nums1.map(num => d.get(num)!);
7+
}

0 commit comments

Comments
 (0)