美文网首页
LeetCode 565. 数组嵌套

LeetCode 565. 数组嵌套

作者: 万浩2020 | 来源:发表于2018-10-01 14:29 被阅读0次

.LeetCode 565. 数组嵌套

索引从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 {
    Map<Integer,Integer> map = new HashMap<>();

    
    public int arrayNesting(int[] nums) {
        boolean[] isUse = new boolean[nums.length];
        List<Integer> list = new ArrayList<>();
        
        for(int x=0;x<nums.length;x++){
            list.add(dfs(nums,isUse,x,0));
        }
        
        int max = 0;
        for(Integer num:list){
            if(num>max){
                max = num;
            }
        }
        
        return max;
    }
    
    int dfs(int[] nums,boolean[] isUse,int next,int len){
        if(map.containsKey(next)){
            return map.get(next);
        }
        if(isUse[next] == true){
            return len;
        }
        isUse[next] = true;
        int sum = dfs(nums,isUse,nums[next],len+1);
        map.put(next,sum);
        isUse[next] = false;
        return sum;
    }
    
}

总结

使用Map来记录数据 减少不必要的递归

反馈与建议

相关文章

  • LeetCode 565. 数组嵌套

    .LeetCode 565. 数组嵌套 索引从0开始长度为N的数组A,包含0到N - 1的所有整数。找到并返回最大...

  • LeetCode 565. Array Nesting(数组嵌套

    索引从0开始长度为N的数组A,包含0到N - 1的所有整数。找到并返回最大的集合S,S[i] = {A[i], A...

  • 565. 数组嵌套

    思路: 想象a[i]与a[a[i]]有一条a[i]指向a[a[i]]的指针,即求多个环内的最大环大小 注意: 无 代码:

  • leetcode565 数组嵌套

    题目 分析 震惊,我竟然能写出这么漂亮的代码。环的长度就是将元素重新排序,每个元素换位置的次数+1。 代码

  • 01-JS-04

    数组 字面量 var arr=[ ];[ 二维数组 ]数组里面再嵌套一个数组 [ 多维数组 ]数组里面嵌套多个数组...

  • LeetCode 565. Array Nesting

    问题描述 给定一个长度为 N 的数组 A,它包含不同的整数,且取值范围为 0 ~ N-1。找出长度最长的集合 S,...

  • leetcode

    leetcode leetcode to practice leetcode ac code 数组专题 done ...

  • js 数组扁平化实现的多种方法

    方法① 效果:不管数组嵌套多少层,都转化为一维数组。 方法② 效果:不管数组嵌套多少层,都转化为一维数组。 方法③...

  • 每日一题

    20170830 数组扁平化: 实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是...

  • angular2foreach遍历的几种用法

    遍历简单的数组 遍历数组对象 遍历嵌套数组

网友评论

      本文标题:LeetCode 565. 数组嵌套

      本文链接:https://www.haomeiwen.com/subject/xldnoftx.html