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] 565. Array Nesting

leetcode 416. 分割等和子集

Leetcode之深度优先搜索(DFS)专题-DFS+记忆化 329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)

从dfs暴力->记忆化->子集背包dp->滚动数组优化