1. 程式人生 > >LeetCode 454. 4Sum II

LeetCode 454. 4Sum II

題解

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; } }