760. Find Anagram Mappings
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.
: easy
Вам given два целочисленных 배열а nums1 и nums2, где nums2 - анаграмма nums1. Оба 배열а могут содержать дубликаты. return индексное отображение 배열а mapping из nums1 в nums2, где mapping[i] = j означает, что i-й element в nums1 появляется в nums2 по индексу j. Если ответов несколько, return любой из них. 배열 a является анаграммой 배열а b означает, что b создается путем случайного изменения порядка elementов в a.
예제:
Input: nums1 = [12,28,46,32,50], nums2 = [50,12,32,46,28]
Output: [1,4,3,2,0]
C# 해법
매칭됨/원본using System;
using System.Collections.Generic;
public class Solution {
public int[] AnagramMapping(int[] nums1, int[] nums2) {
var indexMap = new Dictionary<int, List<int>>();
for (int i = 0; i < nums2.Length; i++) {
if (!indexMap.ContainsKey(nums2[i])) {
indexMap[nums2[i]] = new List<int>();
}
indexMap[nums2[i]].Add(i);
}
var mapping = new int[nums1.Length];
for (int i = 0; i < nums1.Length; i++) {
var indices = indexMap[nums1[i]];
mapping[i] = indices[indices.Count - 1];
indices.RemoveAt(indices.Count - 1);
}
return mapping;
}
}
C++ 해법
자동 초안, 제출 전 검토#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public vector<int>& AnagramMapping(vector<int>& nums1, vector<int>& nums2) {
var indexMap = new unordered_map<int, List<int>>();
for (int i = 0; i < nums2.size(); i++) {
if (!indexMap.count(nums2[i])) {
indexMap[nums2[i]] = new List<int>();
}
indexMap[nums2[i]].push_back(i);
}
var mapping = new int[nums1.size()];
for (int i = 0; i < nums1.size(); i++) {
var indices = indexMap[nums1[i]];
mapping[i] = indices[indices.size() - 1];
indices.RemoveAt(indices.size() - 1);
}
return mapping;
}
}
Java 해법
매칭됨/원본import java.util.*;
public class Solution {
public int[] anagramMapping(int[] nums1, int[] nums2) {
Map<Integer, List<Integer>> indexMap = new HashMap<>();
for (int i = 0; i < nums2.length; i++) {
indexMap.computeIfAbsent(nums2[i], k -> new ArrayList<>()).add(i);
}
int[] mapping = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
mapping[i] = indexMap.get(nums1[i]).remove(indexMap.get(nums1[i]).size() - 1);
}
return mapping;
}
JavaScript 해법
매칭됨/원본function anagramMapping(nums1, nums2) {
let indexMap = new Map();
nums2.forEach((num, i) => {
if (!indexMap.has(num)) {
indexMap.set(num, []);
}
indexMap.get(num).push(i);
});
return nums1.map(num => indexMap.get(num).pop());
}
Python 해법
매칭됨/원본def anagramMapping(nums1, nums2):
index_map = {}
for i, num in enumerate(nums2):
if num in index_map:
index_map[num].append(i)
else:
index_map[num] = [i]
mapping = []
for num in nums1:
mapping.append(index_ma
Algorithm
Создайте словарь для хранения индексов elementов в nums2.
Пройдите по elementам 배열а nums1 и для каждого elementа find соответствующий индекс в nums2, используя словарь.
return 배열 индексов.
😎
Vacancies for this task
활성 채용 with overlapping task tags are 표시됨.
아직 활성 채용이 없습니다.