349.两个数组的交集Java
题目描述
给定两个数组,编写一个函数来计算它们的交集。
输入输出样式
示例1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
本题来自LeetCode:https://leetcode-cn.com/problems/intersection-of-two-arrays/
思路
利用HashSet只能存放不同的元素的特点。分别建立set1,set2加入nums1,nums2的元素,目的是去掉数组中的重复元素。因为add()方法只能加入原来HashSet中没有的元素,否则添加失败。接着挨个把set2中的元素添加到set1,如果二者有重复元素就会进入if条件。
算法分析
时间复杂度O(n + m),空间复杂度为O(n + m),其中m,n为数组长度
求解函数
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set1 = new HashSet();
HashSet<Integer> set2 = new HashSet();
for (int num : nums1) {
set1.add(num);
}
for (int num : nums2) {
set2.add(num);
}
int index = 0;
for (int num : set2) {
//添加失败则说明num为重复元素
if (!set1.add(num)) {
//覆盖到nums1中避免新建数组浪费空间
nums1[index++] = num;
}
}
return Arrays.copyOfRange(nums1, 0, index);
}