1726-同积元组
给你一个由 不同 正整数组成的数组 nums
,请你返回满足 a * b = c * d
的元组 __(a, b, c, d)
__
的数量。其中 a
、b
、c
和 d
都是 nums
中的元素,且 a != b != c != d
。
示例 1:
**输入:** nums = [2,3,4,6]
**输出:** 8
**解释:** 存在 8 个满足题意的元组:
(2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3)
(3,4,2,6) , (4,3,2,6) , (3,4,6,2) , (4,3,6,2)
示例 2:
**输入:** nums = [1,2,4,5,10]
**输出:** 16
**解释:** 存在 16 个满足题意的元组:
(1,10,2,5) , (1,10,5,2) , (10,1,2,5) , (10,1,5,2)
(2,5,1,10) , (2,5,10,1) , (5,2,1,10) , (5,2,10,1)
(2,10,4,5) , (2,10,5,4) , (10,2,4,5) , (10,2,4,5)
(4,5,2,10) , (4,5,10,2) , (5,4,2,10) , (5,4,10,2)
提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 104
nums
中的所有元素 互不相同
解题思路
原始数组元素均不相同是正确解题的前提。
- 枚举元素乘积,生成存有“乘积-出现次数”键值对的哈希表。
- 完成枚举后遍历哈希表,确定出现次数大于1的乘积,假设该乘积出现了m次,存在C_m^2=m(m-1)}{2个乘积对,每个乘积对经过排列可得8个同积元组,故m和与元组增量间的关系是4m(m-1)。
参考代码
1 | // 先枚举,后遍历 |
1 | // 合并处理 |
Comments