日常刷题LeetCode——四数相加 II
Posted 程序员茶馆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日常刷题LeetCode——四数相加 II相关的知识,希望对你有一定的参考价值。
题目:LeetCode 高级 - 四数相加 II
解题思路一(暴力解法)
四重循环,时间复杂度,这显然不可接受。
public class Solution
public int FourSumCount(int[] A, int[] B, int[] C, int[] D)
var length=A.Length;
var count=0;
for(var i=0;i<length;i++)
for(var j=0;j<length;j++)
for(var k=0;k<length;k++)
for(var l=0;l<length;l++)
if(A[i]+B[j]+C[k]+D[l]==0)
count++;
return count;
解题思路二(采用Hash)
如果前一半某元组之和为A[i]+B[j]=sum,需要使得A[i]+B[j]+C[k]+D[l]=0,那么就需要后一半存在某元组使得C[k]+D[l]=-sum。因此我们可以用二重循环将前一半元组的和取反存入字典中,然后再用二重循环在后一半求得元组之和,并在上述字典中寻找是否存在该值。该解法可将算法复杂度降低到。
public class Solution
public int FourSumCount(int[] A, int[] B, int[] C, int[] D)
var length=A.Length;
var map=new Dictionary<int,int>(length);
for(var i=0;i<length;i++)
for(var j=0;j<length;j++)
var sum=A[i]+B[j];
if(map.TryGetValue(-sum,out var num))
map[-sum]=num+1;
else
map.Add(-sum,1);
var count=0;
for(var i=0;i<length;i++)
for(var j=0;j<length;j++)
var sum=C[i]+D[j];
if(map.TryGetValue(sum,out var num))
count+=num;
return count;
以上是关于日常刷题LeetCode——四数相加 II的主要内容,如果未能解决你的问题,请参考以下文章