給定兩個數組,寫一個方法來計算他們的交集。 示例:數組
給定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].
複製代碼
注意:bash
記住要記錄數字及其出現次數,須要對這兩個數組都遍歷一遍,前後在容器記錄nums1中出現的數字及其次數,在遍歷查詢容器中是否存在nums2中的數字,好在這一次不須要再末尾遍歷輸出,也就是說咱們只須要一個基礎的鍵值對容器便可。ui
private static int[] interserct(int[] nums1, int[] nums2) {
// 用來暫存結果,保存數組的長度以及各元素的值
List<Integer> tmp = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
// 保存nums1中元素的個數
for (int i = 0; i < nums1.length; i++) {
Integer temp = map.get(nums1[i]);
map.put(nums1[i], (temp == null ? 1 : temp + 1));
}
// 遍歷nums2,查詢
for (int i = 0; i < nums2.length; i++) {
if (map.containsKey(nums2[i]) && map.get(nums2[i]) != 0) {
//存放該元素,且次數>0,則次數-1
tmp.add(nums2[i]);
map.put(nums2[i], map.get(nums2[i]) - 1);
}
}
int[] result = new int[tmp.size()];
int i = 0;
for (Integer in : tmp) {
result[i++] = in;
}
return result;
}
複製代碼