数据结构与算法总结
3164.优质数对||:
题目:
给你两个整数数组 nums1 和 nums2,长度分别为 n 和 m。同时给你一个正整数 k。
如果 nums1[i] 可以被 nums2[j] * k 整除,则称数对 (i, j) 为 优质数对(0 <= i <= n - 1, 0 <= j <= m - 1)。
返回 优质数对 的总数。
标签:
数组、哈希表、枚举代替遍历
个人总结
1.本题之前有优质数对|,可以使用O(n^2)的遍历进行解决。本题使用哈希表进行优化,主要优化的部分为“nums1和nums2中有很多重复元素时,使用哈希表只需要将元素出现的次数乘起来就可以了”
2.判断元素是否在哈希表,时间复杂度高的话,不采用遍历,可以使用跨越式的枚举
1 | # 下面是取值b*k的倍数,然后判断是否在nums1的哈希表count1中,而不是下面错误的在count1中遍历元素看是否有是b*k倍数的 |
1 | # 下面是时间复杂度高的没有枚举的方法,在count1中遍历元素看是否有是b*k倍数的 |
Counter()
3.学习到了collections模块的Counter()方法,可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。
用法
1 | from collections import Counter |
下面两个方法等价:
1 | counter = defaultdict(int) |
1 | counter = Counter(nums) |
BTW,使用for num in nums在数组中进行迭代进行的操作不会对原数组元素进行修改,要想修改的话需使用for i in range(0,len(nums))
代码:
1 | def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Zxy's Blog!