From f2c04799bbb060e82b114cc9dc05ecefaf948c2e Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Wed, 29 Oct 2025 07:36:42 +0800 Subject: [PATCH] feat: add solutions to lc problem: No.0760 --- .../0760.Find Anagram Mappings/README.md | 77 +++++++++++++++---- .../0760.Find Anagram Mappings/README_EN.md | 77 +++++++++++++++---- .../0760.Find Anagram Mappings/Solution.cpp | 15 ++++ .../0760.Find Anagram Mappings/Solution.go | 11 +++ .../0760.Find Anagram Mappings/Solution.java | 19 +++-- .../0760.Find Anagram Mappings/Solution.py | 6 +- .../0760.Find Anagram Mappings/Solution.ts | 7 ++ 7 files changed, 170 insertions(+), 42 deletions(-) create mode 100644 solution/0700-0799/0760.Find Anagram Mappings/Solution.cpp create mode 100644 solution/0700-0799/0760.Find Anagram Mappings/Solution.go create mode 100644 solution/0700-0799/0760.Find Anagram Mappings/Solution.ts diff --git a/solution/0700-0799/0760.Find Anagram Mappings/README.md b/solution/0700-0799/0760.Find Anagram Mappings/README.md index c636f7a9b7bd4..0a13fe696f661 100644 --- a/solution/0700-0799/0760.Find Anagram Mappings/README.md +++ b/solution/0700-0799/0760.Find Anagram Mappings/README.md @@ -58,7 +58,11 @@ tags: -### 方法一 +### 方法一:哈希表 + +我们用一个哈希表 $\textit{d}$ 来存储数组 $\textit{nums2}$ 中每个元素及其对应的下标。然后我们遍历数组 $\textit{nums1}$,对于每个元素 $\textit{nums1}[i]$,我们从哈希表 $\textit{d}$ 中获取其对应的下标并存入结果数组中。 + +时间复杂度 $O(n)$,空间复杂度 $O(n)$,其中 $n$ 是数组的长度。 @@ -67,10 +71,8 @@ tags: ```python class Solution: def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]: - mapper = defaultdict(set) - for i, num in enumerate(nums2): - mapper[num].add(i) - return [mapper[num].pop() for num in nums1] + d = {x: i for i, x in enumerate(nums2)} + return [d[x] for x in nums1] ``` #### Java @@ -78,18 +80,65 @@ class Solution: ```java class Solution { public int[] anagramMappings(int[] nums1, int[] nums2) { - Map> map = new HashMap<>(); - for (int i = 0; i < nums2.length; ++i) { - map.computeIfAbsent(nums2[i], k -> new HashSet<>()).add(i); + int n = nums1.length; + Map d = new HashMap<>(n); + for (int i = 0; i < n; ++i) { + d.put(nums2[i], i); + } + int[] ans = new int[n]; + for (int i = 0; i < n; ++i) { + ans[i] = d.get(nums1[i]); } - int[] res = new int[nums1.length]; - for (int i = 0; i < nums1.length; ++i) { - int idx = map.get(nums1[i]).iterator().next(); - res[i] = idx; - map.get(nums1[i]).remove(idx); + return ans; + } +} +``` + +#### C++ + +```cpp +class Solution { +public: + vector anagramMappings(vector& nums1, vector& nums2) { + int n = nums1.size(); + unordered_map d; + for (int i = 0; i < n; ++i) { + d[nums2[i]] = i; } - return res; + vector ans; + for (int x : nums1) { + ans.push_back(d[x]); + } + return ans; + } +}; +``` + +#### Go + +```go +func anagramMappings(nums1 []int, nums2 []int) []int { + d := map[int]int{} + for i, x := range nums2 { + d[x] = i + } + ans := make([]int, len(nums1)) + for i, x := range nums1 { + ans[i] = d[x] + } + return ans +} +``` + +#### TypeScript + +```ts +function anagramMappings(nums1: number[], nums2: number[]): number[] { + const d: Map = new Map(); + for (let i = 0; i < nums2.length; ++i) { + d.set(nums2[i], i); } + return nums1.map(num => d.get(num)!); } ``` diff --git a/solution/0700-0799/0760.Find Anagram Mappings/README_EN.md b/solution/0700-0799/0760.Find Anagram Mappings/README_EN.md index 8ee530166f973..109f1f6cf9655 100644 --- a/solution/0700-0799/0760.Find Anagram Mappings/README_EN.md +++ b/solution/0700-0799/0760.Find Anagram Mappings/README_EN.md @@ -55,7 +55,11 @@ tags: -### Solution 1 +### Solution 1: Hash Table + +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. + +The time complexity is $O(n)$ and the space complexity is $O(n)$, where $n$ is the length of the array. @@ -64,10 +68,8 @@ tags: ```python class Solution: def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]: - mapper = defaultdict(set) - for i, num in enumerate(nums2): - mapper[num].add(i) - return [mapper[num].pop() for num in nums1] + d = {x: i for i, x in enumerate(nums2)} + return [d[x] for x in nums1] ``` #### Java @@ -75,18 +77,65 @@ class Solution: ```java class Solution { public int[] anagramMappings(int[] nums1, int[] nums2) { - Map> map = new HashMap<>(); - for (int i = 0; i < nums2.length; ++i) { - map.computeIfAbsent(nums2[i], k -> new HashSet<>()).add(i); + int n = nums1.length; + Map d = new HashMap<>(n); + for (int i = 0; i < n; ++i) { + d.put(nums2[i], i); + } + int[] ans = new int[n]; + for (int i = 0; i < n; ++i) { + ans[i] = d.get(nums1[i]); } - int[] res = new int[nums1.length]; - for (int i = 0; i < nums1.length; ++i) { - int idx = map.get(nums1[i]).iterator().next(); - res[i] = idx; - map.get(nums1[i]).remove(idx); + return ans; + } +} +``` + +#### C++ + +```cpp +class Solution { +public: + vector anagramMappings(vector& nums1, vector& nums2) { + int n = nums1.size(); + unordered_map d; + for (int i = 0; i < n; ++i) { + d[nums2[i]] = i; } - return res; + vector ans; + for (int x : nums1) { + ans.push_back(d[x]); + } + return ans; + } +}; +``` + +#### Go + +```go +func anagramMappings(nums1 []int, nums2 []int) []int { + d := map[int]int{} + for i, x := range nums2 { + d[x] = i + } + ans := make([]int, len(nums1)) + for i, x := range nums1 { + ans[i] = d[x] + } + return ans +} +``` + +#### TypeScript + +```ts +function anagramMappings(nums1: number[], nums2: number[]): number[] { + const d: Map = new Map(); + for (let i = 0; i < nums2.length; ++i) { + d.set(nums2[i], i); } + return nums1.map(num => d.get(num)!); } ``` diff --git a/solution/0700-0799/0760.Find Anagram Mappings/Solution.cpp b/solution/0700-0799/0760.Find Anagram Mappings/Solution.cpp new file mode 100644 index 0000000000000..e8fc479f19f81 --- /dev/null +++ b/solution/0700-0799/0760.Find Anagram Mappings/Solution.cpp @@ -0,0 +1,15 @@ +class Solution { +public: + vector anagramMappings(vector& nums1, vector& nums2) { + int n = nums1.size(); + unordered_map d; + for (int i = 0; i < n; ++i) { + d[nums2[i]] = i; + } + vector ans; + for (int x : nums1) { + ans.push_back(d[x]); + } + return ans; + } +}; diff --git a/solution/0700-0799/0760.Find Anagram Mappings/Solution.go b/solution/0700-0799/0760.Find Anagram Mappings/Solution.go new file mode 100644 index 0000000000000..795ace36a88c9 --- /dev/null +++ b/solution/0700-0799/0760.Find Anagram Mappings/Solution.go @@ -0,0 +1,11 @@ +func anagramMappings(nums1 []int, nums2 []int) []int { + d := map[int]int{} + for i, x := range nums2 { + d[x] = i + } + ans := make([]int, len(nums1)) + for i, x := range nums1 { + ans[i] = d[x] + } + return ans +} diff --git a/solution/0700-0799/0760.Find Anagram Mappings/Solution.java b/solution/0700-0799/0760.Find Anagram Mappings/Solution.java index dc5ee85af78c8..61214048c2748 100644 --- a/solution/0700-0799/0760.Find Anagram Mappings/Solution.java +++ b/solution/0700-0799/0760.Find Anagram Mappings/Solution.java @@ -1,15 +1,14 @@ class Solution { public int[] anagramMappings(int[] nums1, int[] nums2) { - Map> map = new HashMap<>(); - for (int i = 0; i < nums2.length; ++i) { - map.computeIfAbsent(nums2[i], k -> new HashSet<>()).add(i); + int n = nums1.length; + Map d = new HashMap<>(n); + for (int i = 0; i < n; ++i) { + d.put(nums2[i], i); } - int[] res = new int[nums1.length]; - for (int i = 0; i < nums1.length; ++i) { - int idx = map.get(nums1[i]).iterator().next(); - res[i] = idx; - map.get(nums1[i]).remove(idx); + int[] ans = new int[n]; + for (int i = 0; i < n; ++i) { + ans[i] = d.get(nums1[i]); } - return res; + return ans; } -} \ No newline at end of file +} diff --git a/solution/0700-0799/0760.Find Anagram Mappings/Solution.py b/solution/0700-0799/0760.Find Anagram Mappings/Solution.py index 515418ea7a56d..1b50b0798c1a8 100644 --- a/solution/0700-0799/0760.Find Anagram Mappings/Solution.py +++ b/solution/0700-0799/0760.Find Anagram Mappings/Solution.py @@ -1,6 +1,4 @@ class Solution: def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]: - mapper = defaultdict(set) - for i, num in enumerate(nums2): - mapper[num].add(i) - return [mapper[num].pop() for num in nums1] + d = {x: i for i, x in enumerate(nums2)} + return [d[x] for x in nums1] diff --git a/solution/0700-0799/0760.Find Anagram Mappings/Solution.ts b/solution/0700-0799/0760.Find Anagram Mappings/Solution.ts new file mode 100644 index 0000000000000..d8346cc4a2932 --- /dev/null +++ b/solution/0700-0799/0760.Find Anagram Mappings/Solution.ts @@ -0,0 +1,7 @@ +function anagramMappings(nums1: number[], nums2: number[]): number[] { + const d: Map = new Map(); + for (let i = 0; i < nums2.length; ++i) { + d.set(nums2[i], i); + } + return nums1.map(num => d.get(num)!); +}