[leetCode]349. 兩個陣列的交集
阿新 • • 發佈:2020-10-24
csdn:https://blog.csdn.net/renweiyi1487/article/details/109264635
給定兩個陣列,編寫一個函式來計算它們的交集。
示例 1:
輸入:nums1 = [1,2,2,1], nums2 = [2,2] 輸出:[2]
示例 2:
輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出:[9,4]
雜湊
求兩個陣列的交集就是求兩個陣列的共有元素,可以使用兩個set集合來存放每個陣列中不重複的元素,然後迭代另一個set集合中的元素,如果迭代元素屬於另一個set集合則該元素屬於交集中的元素。
class Solution { public int[] intersection(int[] nums1, int[] nums2) { List<Integer> ans = new ArrayList<>(); HashSet<Integer> set1 = new HashSet<>(); HashSet<Integer> set2 = new HashSet<>(); for (Integer num : nums1) { set1.add(num); } for (Integer num : nums2) { set2.add(num); } Iterator<Integer> it = set2.iterator(); while (it.hasNext()) { int num = it.next(); if (set1.contains(num)) { ans.add(num); } } int[] finalAns = new int[ans.size()]; for (int i = 0; i < finalAns.length; i++) { finalAns[i] = ans.get(i); } return finalAns; } }
寫法二:
class Solution { public int[] intersection(int[] nums1, int[] nums2) { int[] output = new int[nums1.length]; HashSet<Integer> set1 = new HashSet<>(); HashSet<Integer> set2 = new HashSet<>(); for (Integer num : nums1) { set1.add(num); } for (Integer num : nums2) { set2.add(num); } int idx = 0; for (Integer num : set2) { if (set1.contains(num)) output[idx++] = num; } return Arrays.copyOf(output, idx); } }