LeetCode454. 四數相加 II
阿新 • • 發佈:2020-12-11
一、題目描述
☆☆☆☆二、解法
思路:將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; } }