import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
public
class
Main {
static
int
MinSwap(List<Integer> v,
int
n,
int
k) {
Map<Integer, List<Integer>> m =
new
HashMap<>();
int
ans = Integer.MAX_VALUE;
for
(
int
i =
0
; i < n; i++) {
int
value = v.get(i);
if
(!m.containsKey(value)) {
m.put(value,
new
ArrayList<>());
}
m.get(value).add(i);
}
for
(Map.Entry<Integer, List<Integer>> entry : m.entrySet()) {
List<Integer> indices = entry.getValue();
if
(indices.size() >= k) {
int
swap =
0
;
for
(
int
i =
0
; i < k -
1
; i++) {
int
a = indices.get(i +
1
);
int
b = indices.get(i);
swap += a - b -
1
;
}
ans = Math.min(ans, swap);
for
(
int
i =
0
; i + k < indices.size(); i++) {
swap = swap - (indices.get(i +
1
) - indices.get(i) -
1
) + (indices.get(i + k) - indices.get(i + k -
1
) -
1
);
ans = Math.min(ans, swap);
}
}
}
if
(ans == Integer.MAX_VALUE)
return
-
1
;
else
return
ans;
}
public
static
void
main(String[] args) {
int
n =
10
;
List<Integer> v =
new
ArrayList<>();
v.add(
1
);
v.add(
2
);
v.add(
5
);
v.add(
1
);
v.add(
4
);
v.add(
6
);
v.add(
5
);
v.add(
7
);
v.add(
1
);
v.add(
5
);
int
k =
3
;
int
ans = MinSwap(v, n, k);
System.out.println(ans);
}
}