import
java.io.*;
import
java.util.*;
class
GFG{
static
ArrayList<Integer>findKthMostOccurring(
ArrayList<Integer> arr,
int
K)
{
HashMap<Integer, Integer> d =
new
HashMap<>();
for
(
int
i =
0
; i < arr.size(); i++)
{
if
(!d.containsKey(arr.get(i)))
d.put(arr.get(i),
1
);
else
{
int
temp = d.get(arr.get(i));
temp +=
1
;
d.put(arr.get(i), temp);
}
}
if
(d.size() < K)
return
new
ArrayList<Integer>();
HashMap<Integer,
ArrayList<Integer>> occu =
new
HashMap<Integer,
ArrayList<Integer>>();
for
(Map.Entry<Integer, Integer> freq : d.entrySet())
{
if
(!occu.containsKey(freq.getValue()))
{
occu.put(freq.getValue(),
new
ArrayList<Integer>());
occu.get(freq.getValue()).add(
freq.getKey());
}
else
{
occu.get(freq.getValue()).add(
freq.getKey());
}
}
K = occu.size() - K;
for
(Map.Entry<Integer,
ArrayList<Integer>> a : occu.entrySet())
{
if
(K ==
0
)
return
a.getValue();
K -=
1
;
}
return
new
ArrayList<Integer>();
}
public
static
void
main(String[] args)
{
ArrayList<Integer> arr =
new
ArrayList<Integer>(
Arrays.asList(
1
,
4
,
4
,
4
,
2
,
2
,
2
,
5
,
5
,
5
,
5
,
5
,
7
,
7
,
8
,
8
,
8
,
8
));
int
K =
3
;
ArrayList<Integer> a =
new
ArrayList<Integer>(
findKthMostOccurring(arr, K));
System.out.print(
"["
);
for
(
int
i =
0
; i < a.size() -
1
; i++)
{
System.out.print(a.get(i) +
", "
);
}
if
(a.size() >=
1
)
System.out.print((
int
)a.get(
a.size() -
1
) +
"]"
);
}
}