565. 陣列巢狀
阿新 • • 發佈:2019-01-06
索引從0
開始長度為N
的陣列A
,包含0
到N - 1
的所有整數。找到並返回最大的集合S
,S[i] = {A[i], A[A[i]], A[A[A[i]]], ... }
且遵守以下的規則。
假設選擇索引為i
的元素A[i]
為S
的第一個元素,S
的下一個元素應該是A[A[i]]
,之後是A[A[A[i]]]...
以此類推,不斷新增直到S
出現重複的元素。
示例 1:
輸入: A = [5,4,0,3,1,6,2] 輸出: 4 解釋: A[0] = 5, A[1] = 4, A[2] = 0, A[3] = 3, A[4] = 1, A[5] = 6, A[6] = 2. 其中一種最長的 S[K]: S[0] = {A[0], A[5], A[6], A[2]} = {5, 6, 2, 0}
注意:
N
是[1, 20,000]
之間的整數。A
中不含有重複的元素。A
中的元素大小在[0, N-1]
之間。
class Solution {
public:
int arrayNesting(vector<int>& nums) {
int n = nums.size(), res = INT_MIN;
vector<bool> visited(n, false);
for (int i = 0; i < n; ++i) {
if (visited[nums[i]]) continue;
int cnt = 0, j = i;
while(cnt == 0 || j != i) {
visited[j] = true;
j = nums[j];
++cnt;
}
res = max(res, cnt);
}
return res;
}
};