-
Notifications
You must be signed in to change notification settings - Fork 0
/
InterSectionOfTwoArrays.java
79 lines (62 loc) · 2.27 KB
/
InterSectionOfTwoArrays.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import java.util.*;
public class InterSectionOfTwoArrays {
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set=new HashSet<>();
for (int x:nums1){
set.add(x);
}
//HashSet<Integer> intersection=new HashSet<>();
ArrayList<Integer> intersection=new ArrayList<>();
for (Integer x: nums2) {
if(set.contains(x)) {
intersection.add(x);
set.remove(x);
}
}
int[] res = intersection.stream().mapToInt(x -> x).toArray();
return res;
}
public int[] intersect(int[] nums1, int[] nums2) {
int min=Math.min(nums1.length, nums2.length);
HashMap<Integer,Integer> map1=new HashMap<>();
HashMap<Integer,Integer> map2=new HashMap<>();
for (int x:
nums1) {
map1.put(x,map1.getOrDefault(x,0)+1);
}
for (int x:
nums2) {
map2.put(x,map2.getOrDefault(x,0)+1);
}
boolean flag=min== nums1.length?true:false;
ArrayList<Integer> res=new ArrayList<>();
if (flag == true) {
findIntersection(map1, map2, res);
} else {
findIntersection(map2, map1, res);
}
return res.stream().mapToInt(x->x).toArray();
}
private void findIntersection(HashMap<Integer,Integer> minMap,HashMap<Integer,Integer> maxMap,ArrayList<Integer> res){
for (Map.Entry<Integer,Integer> entry: minMap.entrySet()) {
if(maxMap.containsKey(entry.getKey())){
int min = Math.min(entry.getValue(), maxMap.get(entry.getKey()));
for (int i = 0; i <min ; i++) {
res.add(entry.getKey());
}
}
}
}
public static void main(String[] args) {
/* int[] a={1,2,2,4};
int[] b={2,4,8,9};
InterSectionOfTwoArrays obj=new InterSectionOfTwoArrays();
int[] intersection = obj.intersection(a, b);
System.out.println(Arrays.toString(intersection));*/
int[] a={1,2,2,1};
int[] b={2,2};
InterSectionOfTwoArrays obj=new InterSectionOfTwoArrays();
int[] intersect = obj.intersect(a, b);
System.out.println(Arrays.toString(intersect));
}
}