题解
4sum变种,本质还是枚举,但是4个数组遍历要O(n^4),有咩有办法减少时间呢?
空间换时间吧。4组两两分着遍历,将其中两组的和用Map记录下来,另外两组求和后在Map中
找到负和就可以了。
ps: java.xxx.map getOrDefault(object,v),寻找键值若无返回缺省的v。
Code
class Solution {
public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
Map<Integer,Integer> map = new HashMap<>();
int sum;
for(int i=A.length-1;i>=0;i--){
for(int j=B.length-1;j>=0;j--){
sum =A[i]+B[j];
map.put( sum, map.getOrDefault(sum,0)+1);
}
}
int ret = 0;
for(int i=C.length-1;i>=0;i--){
for(int j=D.length-1;j>=0;j--){
sum =C[i]+D[j];
ret+= map.getOrDefault(-1*sum,0);
}
}
return ret;
}
}