Untitled
unknown
plain_text
3 years ago
1.2 kB
9
Indexable
class Solution {
int ret;
public int longestCycle(int[] A) {
int n = A.length;
ret = -1;
Map<Integer, Integer> step = new HashMap<>();
boolean[] visited = new boolean[n];
for (int i = 0; i < n; i++) {
if (A[i] == -1) {
visited[i] = true;
}
if (!visited[i]) {
visited[i] = true;
step.clear();
helper(A, i, step, visited, 1);
}
}
return ret;
}
void helper(int[] A, int cur, Map<Integer, Integer> step, boolean[] visited, int curStep) {
int n = A.length;
step.put(cur, curStep);
// step[cur] = curStep;
int next = A[cur];
if (next == -1) {
return;
}
if (visited[next]) {
if (step.containsKey(next)) {
int len = curStep - step.get(next).intValue() + 1;
ret = Math.max(ret, len);
}
} else {
visited[next] = true;
if (A[next] == -1) {
return;
}
helper(A, next, step, visited, curStep + 1);
}
}
}Editor is loading...