import
java.io.*;
import
java.util.*;
class
pair {
int
first, second;
pair(
int
first,
int
second)
{
this
.first = first;
this
.second = second;
}
}
class
GFG {
static
void
find_most_duplicates(
int
[] A)
{
int
N = A.length;
List<pair> freq
=
new
ArrayList<>();
HashMap<Integer, Integer> mp
=
new
HashMap<>();
for
(
int
i =
0
; i < N; i++) {
mp.put(A[i], mp.getOrDefault(A[i],
0
) +
1
);
}
for
(Map.Entry<Integer, Integer> i :
mp.entrySet()) {
freq.add(
new
pair(i.getValue(), i.getKey()));
}
int
max_freq =
0
, X =
0
, m = freq.size();
if
(m ==
1
)
{
pair temp = freq.get(freq.size() -
1
);
max_freq = temp.first;
X =
0
;
}
else
if
(m ==
2
) {
pair temp0 = freq.get(
0
);
pair temp1 = freq.get(
1
);
max_freq = temp0.first + temp1.first;
X = Math.abs(temp0.second - temp1.second);
}
else
{
int
first_greatest =
0
, second_greatest =
0
;
int
first_greatest_index = -
1
,
second_greatest_index = -
1
;
for
(
int
i =
0
; i < m; i++) {
pair temp = freq.get(i);
if
(temp.first > first_greatest)
{
int
temp_int = first_greatest;
first_greatest = second_greatest;
second_greatest = temp_int;
temp_int = first_greatest_index;
first_greatest_index
= second_greatest_index;
second_greatest_index = temp_int;
first_greatest = temp.first;
first_greatest_index = i;
}
else
if
(temp.first > second_greatest) {
second_greatest = temp.first;
second_greatest_index = i;
}
}
max_freq = first_greatest + second_greatest;
pair temp1 = freq.get(first_greatest_index);
pair temp2 = freq.get(second_greatest_index);
X = Math.abs(temp1.second - temp2.second);
}
System.out.println(
"X = "
+ X +
", Maximum Frequency Possible = "
+ max_freq);
}
public
static
void
main(String[] args)
{
int
[] A = {
2
,
1
,
3
,
3
,
4
,
5
};
find_most_duplicates(A);
}
}