方法一:使用一个Map将其中一个数组放到map中,循环遍历第二个数组,如果map中存在第二个数组中含有的的值,放到结果集中.时间复杂度O(n) ,空间复杂度O(n)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class TwoArray {
public static void main(String[] args) {
int [] nums1={1,3,5,6,4,7,9,11,13};
int [] nums2 = {1,9,8,6};
List<Integer> list = new ArrayList<Integer>();
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i = 0;i<nums1.length;i++){
map.put(nums1[i], i);
}
for(int i = 0;i<nums2.length;i++){
if(map.containsKey(nums2[i])){
list.add(nums2[i]);
}
}
System.out.println(list);
}
}
第二种:先排序,然后定义两个指针,时间复杂度O(nlogn) (排序),空间复杂度O(1)
public ArrayList<Integer> getIntersection2(int[] arr, int[] arr2) {
ArrayList<Integer> res = new ArrayList<Integer>();
if(arr == null || arr.length == 0 || arr2 == null || arr2.length == 0) {
return res;
}
Arrays.sort(arr);
Arrays.sort(arr2);
int i = 0;
int j = 0;
while(i < arr.length && j < arr2.length) {
if(arr[i] < arr2[j]) {
i ++;
}
else if(arr[i] > arr2[j]) {
j ++;
}
else {
if(!res.contains(arr[i])) {
res.add(arr[i]);
}
i ++;
j ++;
}
}
return res;
}