C++描述 LeetCode 5243. 同积元组
作者:互联网
C++描述 LeetCode 5243. 同积元组
大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客 ,同时正在尝试在B站中做一些内容分享,B站主页为: 亓官劼的B站主页
本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!!
若需联系博主,可以联系本人微信:qiguanjie2015
题目
给你一个由 不同 正整数组成的数组 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) , (3,4,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)
示例 3:
输入:nums = [2,3,4,6,8,12]
输出:40
示例 4:
输入:nums = [2,3,5,7]
输出:0
提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 104
nums
中的所有元素 互不相同
题解思路
找出所有乘积相同的乘数对,并记录数量。每N对乘数对可以形成Cn2组2对的乘数对,每2对乘积相同的乘数对可以形成8中不同的排列,所以我们只需要想找到的乘积相同的乘数对进行排列组合并且*8后进行累加即可。
算法实现
class Solution {
public:
int tupleSameProduct(vector<int>& nums) {
int len = nums.size(),ans = 0;
unordered_map<int,int> hash;
for(int i = 0 ; i < len ; i++){
for(int j = i+1 ; j < len ; j++){
hash[nums[i] * nums[j]]++;
}
}
for(auto &[key,value]:hash){
ans += value * (value-1) / 2 * 8;
}
return ans;
}
};
标签:10,示例,int,同积,nums,5243,元组,乘数 来源: https://blog.csdn.net/qq_43422111/article/details/112743353