3164. 优质数对的总数 II
2024-10-11 09:19:48
Problem: 3164. 优质数对的总数 II
思路
观察本题数据量,可以知道暴力模拟是会超时的,那要怎么求解呢?
首先,两个数组的长度都是$10^5$,每个数据的大小不大于$10^6$,如果我们遍历nums2
,并在二重循环里以nums2[j] * k
为步伐大小遍历nums2[j] * k
,如果答案在nums[1]
里有则记录下来(哈希查找时间复杂度$O(1)$),直到nums[1]
的最大值为止。第二层遍历的期望时间是比遍历nums1
要小的。
但是这样遇到一些测试用例仍然无法通过,仔细看可以发现,题目并没有说明nums1
或nums2
中的整数不重复,这样对于重复的整数的计算都是冗余的,我们用哈希表维护出现的次数,在找到时改成加上对应出现的次数的乘积即可。
这些测试用例一般都是
nums2[j]
极小而nums1[i]
极大,并且多次重复。如果没有重复,前者就会不可避免地增大,后者相应减小,这样时间复杂度是较低的。
复杂度
时间复杂度: $O(n+m+v/k×logm)$,其中
n
和m
分别是数组nums1
和nums2
的长度,k
是给定的正整数,v
是数组nums1
最大值,logm
是「调和级数」求和的结果。空间复杂度: $O(n + m)$。
Code
1 | class Solution { |