letcode每日一题-四数相加 II
现在的天气真的是冷的冻耳朵,做道题来热热身吧!!!
题目描述如下:
解题思路:
A[i] + B[j] + C[k] + D[l] = 0 我们可以把A[i] + B[j] + C[k] + D[l]看成两个整体,即两个数相加为0,
这样最快的就是把其中一部分放进Hash中,直接判断0-另一个数的结果在hash中是否存在就可以了。
方案一:A为一部分,B,C,D为一部分,这样时间复杂度是O(N^3)
方案二:A,B为一部分,C,D为一部分,这样时间复杂度是O(N^2)
方案三:A,B,C为一部分,D为一部分,时间复杂度是O(N^3)
这样看来方案二是最好的,代码实现:
public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
int result=0;
HashMap<Integer,Integer> sumMapAB=new HashMap<>();
for(int i=0;i<A.length;i++){
for(int j=0;j<B.length;j++){
int sum=A[i]+B[j];
sumMapAB.put(sum,sumMapAB.getOrDefault(sum,0)+1);
}
}
for(int i=0;i<C.length;i++){
for(int j=0;j<D.length;j++){
int sum=C[i]+D[j];
result+=sumMapAB.getOrDefault(0-sum,0);
}
}
return result;
}
明天也要加油啊!!!