給定兩個數組,編寫一個函數來計算它們的交集。
示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2,2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [4,9]
說明:
輸出結果中每個元素出現的次數,應與元素在兩個數組中出現的次數一致。
我們可以不考慮輸出結果的順序。
進階:
如果給定的數組已經排好序呢?你將如何優化你的算法?
如果?nums1?的大小比?nums2?小很多,哪種方法更優?
如果?nums2?的元素存儲在磁盤上,磁盤內存是有限的,并且你不能一次加載所有的元素到內存中,你該怎么辦?
思路:相似題:leetcode349. 兩個數組的交集
但是這個題set解決不了問題了。用map記錄出現的次數即可。
class Solution {public int[] intersect(int[] nums1, int[] nums2) {if (nums1.length > nums2.length) {return intersect(nums2, nums1);}HashMap<Integer, Integer> m = new HashMap<>();for (int n : nums1) {m.put(n, m.getOrDefault(n, 0) + 1);}int k = 0;for (int n : nums2) {int cnt = m.getOrDefault(n, 0);if (cnt > 0) {nums1[k++] = n;m.put(n, cnt - 1);}}return Arrays.copyOfRange(nums1, 0, k);}
}
?