昨天太忙,今天补上这一题。题目如下:
首先能够想到的就是使用比较暴力的方法,通过四层循环去找到结果,但是这种结果肯定是超时的,想了好久都没想到,在网上找到了使用map实现的方法。代码如下:
1 /** 2 * @param {number[]} A 3 * @param {number[]} B 4 * @param {number[]} C 5 * @param {number[]} D 6 * @return {number} 7 */ 8 var fourSumCount = function(A, B, C, D) { 9 let res = 0, n = A.length; 10 11 let m = new Map(); 12 13 for(let i = 0 ; i < n ; i++){ 14 for(let j = 0 ; j < n ; j++){ 15 if(m.has(A[i]+B[j])){ 16 m.set(A[i]+B[j], m.get(A[i]+B[j]) + 1); 17 }else{ 18 m.set(A[i]+B[j], 1); 19 } 20 21 } 22 } 23 24 for(let i = 0 ; i < n ; i++){ 25 for(let j = 0 ; j < n ; j++){ 26 let opp = -1*(C[i]+D[j]); 27 if(m.has(opp)){ 28 res += m.get(opp); 29 } 30 } 31 } 32 33 return res; 34 };
END