列表

详情


760. 找出变位映射

给定两个列表 Aand B,并且 BA 的变位(即 B 是由 A 中的元素随机排列后组成的新列表)。

我们希望找出一个从 AB 的索引映射 P 。一个映射 P[i] = j 指的是列表 A 中的第 i 个元素出现于列表 B 中的第 j 个元素上。

列表 AB 可能出现重复元素。如果有多于一种答案,输出任意一种。

例如,给定

A = [12, 28, 46, 32, 50]
B = [50, 12, 32, 46, 28]

 

需要返回

[1, 4, 3, 2, 0]

P[0] = 1 ,因为 A 中的第 0 个元素出现于 B[1],而且 P[1] = 4 因为 A 中第 1 个元素出现于 B[4],以此类推。

 

注:

  1. A, B 有相同的长度,范围为 [1, 100]
  2. A[i], B[i] 都是范围在 [0, 10^5] 的整数。

 

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> anagramMappings(vector<int>& nums1, vector<int>& nums2) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2023-10-15 17:46:16

func anagramMappings(A []int, B []int) []int {
	m := map[int]int{}
	for i, n := range B {
		m[n] = i
	}
	out := make([]int, len(A))
	for i, n := range A {
		out[i] = m[n]
	}
	return out
}

java 解法, 执行用时: 0 ms, 内存消耗: 40.1 MB, 提交时间: 2023-10-15 17:45:49

class Solution {
    public int[] anagramMappings(int[] A, int[] B) {
        Map<Integer, Integer> D = new HashMap();
        for (int i = 0; i < B.length; ++i)
            D.put(B[i], i);

        int[] ans = new int[A.length];
        int t = 0;
        for (int x: A)
            ans[t++] = D.get(x);
        return ans;
    }
}

python3 解法, 执行用时: 44 ms, 内存消耗: 16 MB, 提交时间: 2023-10-15 17:45:38

class Solution:
    def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]:
        D = {x: i for i, x in enumerate(nums2)}
        return [D[x] for x in nums1]

上一题