Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2]
.
Note:
- Each element in the result must be unique.
- The result can be in any order.
思路分析:
1. 找出两个数组中公共的数字,不要重复。没有时间/空间复杂度的要求。
思路1:
1. 找出两个数组中公共的数字,不要重复。没有时间/空间复杂度的要求。
思路1:
将nums1中的元素,不重复的挑选出来,存于set1中。对于nums2中的元素,每一个都分别于set1中对于,若存在,则放入结果集。
思路2:
将nums1与nums2分别排序,再设置两个指针,而后逐一比较。数值小的指针,后移一位,再进行比较
。
思路3:
二分查找。只排队一个数组。而后将另一数组的元素,逐一放在排好序的数组中进行二分查找。
以下是第一种思路的代码:
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set1 = new HashSet<Integer>();
for(int i = 0; i < nums1.length; i++){
if(!set1.contains(nums1[i]))
set1.add(nums1[i]);
}
HashSet<Integer> set2 = new HashSet<Integer>();
for(int i = 0; i < nums2.length; i++){
if(set1.contains(nums2[i]) && !set2.contains(nums2[i]))
set2.add(nums2[i]);
}
int res[] = new int[set2.size()];
int index = 0;
for(int num : set2){
res[index++] = num;
}
return res;
}
}