找到两个数组中的公共元素

65 阅读1分钟

leetcode 2956 leetcode.cn/problems/fi…

一次遍历实现

class Solution:
    def findIntersectionValues(self, nums1: List[int], nums2: List[int]) -> List[int]:
        arr = [0] * 110
        for n in nums1:
            arr[n] +=1
        a1 = 0
        a2 = 0
        for n in nums2:
            if arr[n] !=0:
                if arr[n] !=-1:
                    a1 += arr[n]
                a2+=1
                arr[n] = -1
        return [a1,a2]

一次遍历的方法什么原理呢? 先用数组arry,记录nums1中所有元素出现的次数,其实就是类似哈希表 然后遍历nums2 如果这个元素n做下标时,在数组arry中对应的值不为0,代表这个值nums1中也出现了, a1 += array[n],a2++,但是如果另一个nums2中的元素也为n,这时候a1就不能再+=arry[n]了,因为已经加过了,a2还是要++ 所以在判断array[n] !=0 成立时,还要再把array[n] 设为特值-1,多一个判断。