1. 程式人生 > 實用技巧 >LeetCode454. 四數相加 II

LeetCode454. 四數相加 II

一、題目描述

☆☆☆☆二、解法

思路:將C+D的每一種可能放入查詢表中,時間複雜度為O(n^2)。 由於可能有多組C+D的和相等,用Map記錄每一個和出現了多少次。

舉一反三:不是直接把資料放入查詢表中,而是組合邏輯把特定的內容放入查詢表中。還可以把A+B和C+D的每一種可能放入兩個查詢表中,時間複雜度依然是O(n^2)的。

class Solution {
    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        /**
         *  思路: 使用Map記錄C+D的每一種可能,將時間複雜度由 O(n^4) 優化到 O(n^2)
         *          空間複雜度 O(n^2)
         
*/ Map<Integer,Integer> map = new HashMap<>(); for (int i = 0; i < C.length; i++) { for (int j = 0; j < D.length; j++) { map.put(C[i]+D[j], map.getOrDefault(C[i]+D[j], 0) + 1); } } int count = 0; for (int i = 0; i < A.length; i++) {
for (int j = 0; j < B.length; j++) { int target = - (A[i] + B[j]); if (map.containsKey(target)) { count += map.get(target); } } } return count; } }