leetcode454.四数相加II 时间复杂度处理
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
int l=A.size(),count=0;
int i,j,k,t;
for(i=0;i<l;i++)
{
for(j=0;j<l;j++)
{
for(k=0;k<l;k++)
{
for(t=0;t<l;t++)
{
if(A[i] + B[j] + C[k] + D[t] == 0)
count++;
}
}
}
}
return count;
}
};
简单的暴力求解会导致超时。
于是运用题解分组+map键值对的方法:
查找相反数出现的次数,相当于两数和
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
int l=A.size(),count=0;
int i,j,k,t;
unordered_map<int,int>mymap;
for(i=0;i<l;i++)
{
for(j=0;j<l;j++)
{
mymap[A[i]+B[j]]++;
}
}
for(i=0;i<l;i++)
{
for(j=0;j<l;j++)
{
if(mymap.count(-C[i]-D[j]))
count+=mymap[-C[i]-D[j]];
}
}
return count;
}
};
时间复杂度为O(n^2)