題目
給定兩個數組,編寫一個函數來計算它們的交集。
- 示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2]
- 示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [9,4]
- 說明:
輸出結果中的每個元素一定是唯一的。
我們可以不考慮輸出結果的順序。
解析
想了兩種思路:
針對短的那個數組進行排序,然后遍歷長的那個,查找短的數組中是否存在相同元素。排序可以用快排,查找用二分查找。
第二種,針對其中一個數字建立hash索引,遍歷第二個數組,在第一個中查找。(最后采用的思路,第一種寫起來太麻煩)
實現
java實現,用時3ms
int[] intersection(int[] nums1, int[] nums2) {
int length1 = nums1.length;
int length2 = nums2.length;
if (length1 == 0 || length2 == 0) {
return new int[0];
}
Set<Integer> set1 = new HashSet<>(length1);
for (int value : nums1) {
set1.add(value);
}
Set<Integer> result = new HashSet<>(length1);
for (int value : nums2) {
if (set1.contains(value)) result.add(value);
}
int[] r = new int[result.size()];
int count = 0;
for (Integer value : result) {
r[count++] = value;
}
return r;
}
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/intersection-of-two-arrays