import
java.util.*;
public
class
Main {
static
int
minimizeJumps(List<Integer> arr,
int
target,
int
K)
{
int
n = arr.size();
Map<Integer, List<Integer> > unmap
=
new
HashMap<>();
for
(
int
i =
0
; i < n; i++) {
unmap
.computeIfAbsent(arr.get(i),
k ->
new
ArrayList<>())
.add(i);
}
Queue<Integer> q =
new
LinkedList<>();
boolean
[] visited =
new
boolean
[n];
q.offer(
0
);
visited[
0
] =
true
;
int
count =
0
;
while
(!q.isEmpty()) {
int
size = q.size();
for
(
int
i =
0
; i < size; i++) {
int
curr = q.poll();
if
(arr.get(curr) == target) {
return
count;
}
if
(curr + K < n && !visited[curr + K]) {
q.offer(curr + K);
visited[curr + K] =
true
;
}
if
(curr - K >=
0
&& !visited[curr - K]) {
q.offer(curr - K);
visited[curr - K] =
true
;
}
for
(
int
child : unmap.getOrDefault(
arr.get(curr),
Collections.emptyList())) {
if
(curr == child) {
continue
;
}
if
(!visited[child]) {
q.offer(child);
visited[child] =
true
;
}
}
unmap.remove(arr.get(curr));
}
count++;
}
return
count;
}
public
static
void
main(String[] args)
{
List<Integer> arr = Arrays.asList(
60
, -
23
, -
23
,
300
,
60
,
23
,
23
,
23
,
3
,
300
);
int
target =
300
, K =
1
;
System.out.println(minimizeJumps(arr, target, K));
}
}