-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArray_Intersection(Time_complexity).txt
More file actions
125 lines (101 loc) · 3.45 KB
/
Copy pathArray_Intersection(Time_complexity).txt
File metadata and controls
125 lines (101 loc) · 3.45 KB
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Array Intersection
Send Feedback
You have been given two integer arrays/list(ARR1 and ARR2) of size N and M, respectively. You need to print their intersection; An intersection for this problem can be defined when both the arrays/lists contain a particular value or to put it in other words, when there is a common value that exists in both the arrays/lists.
Note :
Input arrays/lists can contain duplicate elements.
The intersection elements printed would be in the order they appear in the first sorted array/list(ARR1).
Input format :
The first line contains an Integer 't' which denotes the number of test cases or queries to be run. Then the test cases follow.
The first line of each test case or query contains an integer 'N' representing the size of the first array/list.
The second line contains 'N' single space separated integers representing the elements of the first the array/list.
The third line contains an integer 'M' representing the size of the second array/list.
The fourth line contains 'M' single space separated integers representing the elements of the second array/list.
Output format :
For each test case, print the intersection elements in a row, separated by a single space.
Output for every test case will be printed in a separate line.
Constraints :
1 <= t <= 10^2
0 <= N <= 10^6
0 <= M <= 10^6
Time Limit: 1 sec
Sample Input 1 :
2
6
2 6 8 5 4 3
4
2 3 4 7
2
10 10
1
10
Sample Output 1 :
2 3 4
10
Sample Input 2 :
1
4
2 6 1 2
5
1 2 3 4 2
Sample Output 2 :
1 2 2
Explanation for Sample Output 2 :
Since, both input arrays have two '2's, the intersection of the arrays also have two '2's.
The first '2' of first array matches with the first '2' of the second array.
Similarly, the second '2' of the first array matches with the second '2' if the second array.
public class Solution {
public static int partitionFun(int[] a, int si, int ei){
int pivot = a[si];
int count = 0;
for(int j=si+1; j<=ei; j++){
if(pivot>a[j]){
count++;
}
}
int temp = a[si+count];
a[si+count] = pivot;
a[si] = temp;
int x = si;
int y = ei;
while(x<y){
if(a[x]<pivot){
x++;
}
else if(a[y]>=pivot){
y--;
}
else {
temp = a[x];
a[x] = a[y];
a[y] = temp;
x++; y--;
}
}
return (si+count);
}
public static void quickSortFun(int[] a, int si, int ei){
if(si<ei){
int i = partitionFun(a, si, ei);
quickSortFun(a, si, i-1);
quickSortFun(a, i+1, ei);
}
}
public static void intersection(int[] arr1, int[] arr2) {
//Your code goes here
if(arr1.length == 0 || arr2.length == 0) return;
quickSortFun(arr1, 0, arr1.length-1);
quickSortFun(arr2, 0, arr2.length-1);
int x = 0, y = 0;
while(x<arr1.length && y<arr2.length){
if(arr1[x] == arr2[y]){
System.out.print(arr1[x] + " ");
x++;
y++;
}else if(arr1[x] > arr2[y]){
y++;
}else if(arr2[y] > arr1[x]){
x++;
}
}
}
}