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

leetcode 2956 https://leetcode.cn/problems/find-common-elements-between-two-arrays/
一次遍历实现

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,多一个判断。

posted @ 2024-07-16 23:51  博客是个啥?  阅读(1)  评论(0编辑  收藏  举报