0
点赞
收藏
分享

微信扫一扫

四数相加 II

時小白 2022-06-14 阅读 149

给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。

为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。

例如:

输入:
A = [ 1, 2]
B = [-2,-1]
C = [-1, 2]
D = [ 0, 2]

输出:
2

解释:
两个元组如下:
1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0
class Solution {
public:

int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {

int count=0;

vector<int> a=nums1;
vector<int> b=nums2;
vector<int> c=nums3;
vector<int>d=nums4;
a.erase(unique(a.begin(),a.end()),a.end());
b.erase(unique(b.begin(),b.end()),b.end());
c.erase(unique(c.begin(),c.end()),c.end());
d.erase(unique(d.begin(),d.end()),d.end());

if(a.size()==b.size()==c.size()==d.size())
{
if(a[0]==0)
return nums1.size()*nums1.size()*nums1.size()*nums1.size();
}


sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
sort(nums3.begin(),nums3.end());
sort(nums4.begin(),nums4.end());
int loop=nums1.size();

vector<vector<int>>vec;

for(int i=0;i<loop;i++)
{
for(int j=0;j<loop;j++)
{
for(int k=0;k<loop;k++)
{
for(int l=0;l<loop;l++)
{
if((nums1[i]+nums2[j]+nums3[k]+nums4[l])!=0)
{
continue;
}
else if((nums1[i]+nums2[j]+nums3[k]+nums4[l])==0)
{
// cout<<"i="<<i<<" j="<<j<<" k="<<k<<" l="<<l<<endl;
vector<int>temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
temp.push_back(l);
vec.push_back(temp);
}
}
}
}
}
sort(vec.begin(),vec.end());
vec.erase(unique(vec.begin(),vec.end()),vec.end());
return vec.size();
}
};

四数相加 II_数组


举报

相关推荐

0 条评论