📅  最后修改于: 2023-12-03 15:41:38.993000             🧑  作者: Mango
给定一个无序数组 nums,找出所有不重复对的乘积等于给定的目标数 k。
示例:
输入: nums = [2,3,4,5,6], k = 12 输出: [[2, 6], [3, 4]]
本题需要找到所有不重复的数对组合,使得它们的乘积等于给定的目标数 k。通过穷举法可以得到所有的数对,时间复杂度为 O(N^2)。但我们希望在时间复杂度方面得到优化。
我们可以使用哈希表来存储所有可能的因子,并以它们出现的次数作为哈希表的值。在发现一个数 x 是 k 的因子时,我们遍历哈希表查看是否存在现有的另一个因子,它与 x 相乘等于目标值 k。这个过程需要遍历哈希表中的所有键值对,时间复杂度为 O(N)。因此,总时间复杂度为 O(N)。
def findPairs(nums, k):
res = []
factor = {}
for num in nums:
if num in factor and [num, k//num] not in res:
res.append([num, k//num])
factor[k//num] = factor.get(k//num, 0) + 1
return res
本题可以通过使用哈希表的方式来达到优化的效果。使用哈希表存储因子可以有效控制复杂度。在实际工程的代码实现中,还需要注意对特殊情况的判断,避免出现不必要的错误。