题目:
题解:
代码如下:
// 思路1代码
class Solution {
public:
int tupleSameProduct(vector<int>& nums) {
sort(nums.begin(),nums.end());
int res=0,n=nums.size();
for(int i=0;i<n-3;++i)
{
for(int j=n-1;j>i+2;j--)
{
int l=i+1,r=j-1;
while(l<r)
{
int x=nums[i]*nums[j],y=nums[l]*nums[r];
if(y>x)r--;
else if(y<x)l++;
else{
res+=8;
l++,r--;
}
}
}
}
return res;
}
};
// 思路2代码
class Solution {
public:
// 哈希表:统计数组中两个不同数字的乘积的个数,其中标准的四元组的个数为两个数字相同乘积的两两组合,即乘积为x的个数y中选2个,y*(y-1)/2
int tupleSameProduct(vector<int>& a) {
int n=a.size();
unordered_map<int,int> mp;
for(int i=0;i<n;++i)
for(int j=i+1;j<n;++j)
mp[a[i]*a[j]]++;
int res=0;
for(auto [x,y]:mp)
res+=y*(y-1)/2*8;
return res;
}
};