LeetCode 565 数组嵌套[dfs 记忆化] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 565 数组嵌套[dfs 记忆化] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
首先要弄清楚数组的特点,在这个数组中,所有节点的出度为0,入度为0,这就表明数组是由各个节点构成的多个环组成(也可能就一个环,但是肯定是环),所以我们只需要找到最大的那个环长度即可,单纯的暴力递归会超时,最好的方法是用记忆化,将访问过的节点记录下来,再次访问直接跳过(因为是同一个环),如果当前环的长度超过数组的一半,那么该环的长度一定是最长的,直接返回即可,代码如下:
class Solution
public:
int arrayNesting(vector<int>& nums)
int n = nums.size();
vector<bool> visited(n, false);
int maxLen = 1;
for(int i = 0; i < n; i ++)
if(maxLen > n / 2) return maxLen;
if(visited[nums[i]]) continue;
int curLen = 1;
visited[nums[i]] = true;
int cur = nums[i];
while(!visited[nums[cur]])
visited[nums[cur]] = true;
curLen ++;
cur = nums[cur];
cout << endl;
maxLen = max(maxLen, curLen);
return maxLen;
;
以上是关于LeetCode 565 数组嵌套[dfs 记忆化] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
leetcode之最短路径+记忆化dfs+bfs+动态规划刷题总结
leetcode热题100——单词拆分(dfs记忆化的考察)
Leetcode之深度优先搜索(DFS)专题-DFS+记忆化 329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)