找到两个数组中的公共元素
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,多一个判断。