nums라는 길이 n의 int 배열이 있고, [0, n-1] 범위의 원소가 하나씩 무작위로 배열되어 있다.
ex) n = 6, [1, 3, 4, 5, 0, 2]
이 때, s[k] = {nums[k], nums[nums[k]], nums[nums[nums[k]]], ... }
라는 배열을 만들 수 있는데, 최대 길이를 갖는 s 배열을 찾아서 그 길이를 return하는 것이 본 문제의 목표이다.
문제 링크
class Solution {
public int arrayNesting(int[] nums) {
int len = nums.length;
int answer = 0;
for (int i = 0; i < len; i++) {
if (nums[i] == i) {
answer = Math.max(answer, 1);
continue;
}
int iterLen = 0;
if (nums[i] != len) {
int iter = nums[i];
while (true) {
int tmp = iter;
iter = nums[iter];
nums[tmp] = len;
if (iter == len) {
break;
}
iterLen++;
}
}
answer = Math.max(answer, iterLen);
if (answer > Math.ceil(len / 2.0)) {
return answer;
}
}
return answer;
}
}
s
의 길이는 1이 된다.s
의 길이가 nums
의 길이의 반 정도보다 클 경우는 최종 정답이 된다.s
의 길이는 iterLen
에 저장되며, iterLen
과 answer
중 큰 값이 answer
에 업데이트된다.nums
의 길이로 업데이트한다.