LeetCode——565.数组嵌套

通过万岁!!!

  • 题目:就是给你一个数组,然后按照他的数组的指引往下走(题目保证了不越界,因为数组的值是0到n-1的),然后从每个位置开始其实都可以指引着走,问能够走到的最大长度。这里的最大长度是不重复的。可以看一下例子理解一下,就是a[0]是5,那么我们就接下来遍历a[5],然后a[5]是6,那么接下来遍历a[6]…,然后他遍历到a[2]以后,会回到a[0]。
  • 思路:其实我们可以发现,他其实会形成环,我们就记录环的长度即可,并且这个数如果遍历过,那么其实就不用遍历了,所以再定义一个flag数组,标记这个数有没有遍历过。
  • 技巧:数组的遍历,深度有限

java代码

class Solution {
    public int arrayNesting(int[] nums) {
        int len = nums.length;
        boolean[] flags = new boolean[len];
        int temp;
        int ans = 0;
        for (int i = 0; i < len; i++) {
            int idx = i;
            temp = 0;
            while (!flags[idx]) {
                flags[idx] = true;
                idx = nums[idx];
                temp++;
            }
            ans = Math.max(ans, temp);
            if (ans == len) {
                return ans;
            }
        }
        return ans;
    }
}
  • 总结:题目不是有点难理解,但是看一下测试例子,其实就简单了,注意这里的flags数组,其实就是剪枝了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值