找出变位映射

Submission

运行时间: 21 ms

内存: 16.0 MB

class Solution:
    def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]:
        res = []
        for i in range(len(nums1)):
            for j in range(len(nums2)):
                if nums1[i] == nums2[j]:
                    res.append(j)
                    break
        return res

Explain

该题解的思路是使用双重循环来寻找 nums1 中每个元素在 nums2 中对应的下标。外层循环遍历 nums1 的每个元素,内层循环遍历 nums2 的每个元素,当找到相等的元素时,将 nums2 中的下标加入结果数组 res 中,并通过 break 跳出内层循环,继续查找下一个 nums1 的元素。

时间复杂度: O(n^2)

空间复杂度: O(n)

class Solution:
    def anagramMappings(self, nums1: List[int], nums2: List[int]) -> List[int]:
        res = []
        for i in range(len(nums1)):  # 遍历 nums1 的每个元素
            for j in range(len(nums2)):  # 遍历 nums2 的每个元素
                if nums1[i] == nums2[j]:  # 如果找到相等的元素
                    res.append(j)  # 将 nums2 中的下标加入结果数组
                    break  # 跳出内层循环,继续查找下一个 nums1 的元素
        return res

Explore

是的,双重循环的方法确实会受到 nums2 中元素的顺序影响。因为该方法依赖于在 nums2 中找到第一个与 nums1 中当前元素相等的位置,并记录该位置的下标。如果 nums2 的元素顺序改变,相同的数在 nums2 中的位置可能也会改变,从而影响到最终结果数组中的下标值。

该题解的实现方式确实没有直接考虑 nums2 中元素重复的情况。它只会记录每个 nums1 中元素在 nums2 中第一次出现位置的下标。如果 nums2 中存在重复元素,该方法只能找到第一个匹配的元素的下标,而不会考虑后续重复元素的位置。不过,对于题目要求来说,这通常是足够的,除非题目有特别指定需要处理重复元素的情况。

是的,可以通过使用哈希表来优化查找过程。具体方法是首先遍历 nums2,并将每个元素及其对应的下标存入哈希表(针对重复元素,可以存储所有下标的列表)。然后遍历 nums1,通过哈希表直接查找每个元素在 nums2 中的下标。这样可以将原本的时间复杂度从 O(n*m) 降低到 O(n+m),其中 n 和 m 分别是 nums1 和 nums2 的长度。这种方法不仅提高了效率,还能处理 nums2 中重复元素的情况。