题目:

索引从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]之间。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/array-nesting
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

结果:

解题思路:

这题一开始暴力每次都循环的结果自然就是超时了。。

然后就开始思考怎样可以避免重复的循环?

通过画图:

A = [5,4,0,3,1,6,2]

用下标标识它的环是:0 -> 5 -> 6 -> 2 -> 0。

一个环里面,所有的元素绕一圈回来的长度是固定的,那么一个环计算一次就可以了。

因此计算这个环,0开始的时候吧5/6/2的数值都置为-1,让下一次不必计算就可以。由此减少了循环次数。

代码:

int arrayNesting(int* nums, int numsSize){int maxCount = 0;for (int i = 0; i < numsSize; i++) {int count = 1;if (nums[i] == -1) {continue;}for (int j = nums[i]; j != i; ) {int temp = nums[j];nums[j] = -1;count++;j = temp;}maxCount = count > maxCount ? count : maxCount;}return maxCount;
}

C练题笔记之:Leetcode-565. 数组嵌套相关推荐

  1. LeetCode 565. 数组嵌套

    1. 题目 索引从0开始长度为N的数组A,包含0到N - 1的所有整数. 找到最大的集合S并返回其大小,其中 S[i] = {A[i], A[A[i]], A[A[A[i]]], ... }且遵守以下 ...

  2. C练题笔记之:Leetcode-303. 区域和检索 - 数组不可变

    题目: 给定一个整数数组  nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= rig ...

  3. C练题笔记之:Leetcode-307. 区域和检索 - 数组可修改

    题目: 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的n ...

  4. C练题笔记之:Leetcode-1460. 通过翻转子数组使两个数组相等

    题目: 给你两个长度相同的整数数组 target 和 arr . 每一步中,你可以选择 arr 的任意 非空子数组 并将它翻转.你可以执行此过程任意次. 如果你能让 arr 变得与 target 相同 ...

  5. C练题笔记之:Leetcode-12. 整数转罗马数字

    题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X             1 ...

  6. C练题笔记之:Leetcode-654. 最大二叉树

    题目: 给定一个不重复的整数数组 nums . 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值. 递归地在最大值 左边 的 子数组前缀上 构建左子 ...

  7. C练题笔记之:Leetcode-2055. 蜡烛之间的盘子

    题目: 给你一个长桌子,桌子上盘子和蜡烛排成一列.给你一个下标从 0 开始的字符串 s ,它只包含字符 '*' 和 '|' ,其中 '*' 表示一个 盘子 ,'|' 表示一支 蜡烛 . 同时给你一个下 ...

  8. C练题笔记之:Leetcode-962. 最大宽度坡

    题目: 给定一个整数数组 A,坡是元组 (i, j),其中  i < j 且 A[i] <= A[j].这样的坡的宽度为 j - i. 找出 A 中的坡的最大宽度,如果不存在,返回 0 . ...

  9. C练题笔记之:Leetcode-804. 唯一摩尔斯密码词

    题目: 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: 'a' 对应 ".-" , 'b' 对应 "-..." ...

最新文章

  1. 【spring boot】【thymeleaf】SPEL处理 null 值
  2. 如何从ERP下载Sales BOM到CRM
  3. 每日一题:leetcode341.扁平化嵌套列表迭代器
  4. Java 高级类(上) —— 抽象类和接口
  5. 地址后面的sessionid怎么消除_水泥地面起灰起砂不平怎么解决?
  6. 报错,Field cardTypeService in cn.yihuazt.cols.controller.CardTypeController required a bean of type ‘c
  7. c语言结构体菜单显示框架,请教c语言结构体嵌套问题。field `atItem' has incomplete type...
  8. 分表扩展全局序列原理_高可用_单表存储千万级_海量存储_分表扩展---MyCat分布式数据库集群架构工作笔记0025
  9. 低代码工具是软件维护的噩梦?
  10. WampServer下开启curl
  11. java argv_argv的编码是什么?
  12. 系列文章--WF学习资料汇总
  13. 微信android版6.3.27,微信6.3.27旧版本
  14. Dxg——立创EDA [LCEDA] 开发笔记整理分类合集【所有的相关记录,都整理在此】
  15. 尚硅谷谷粒商城之环境搭建
  16. 利用到路面提取道路中心线的方法
  17. 第五篇:风控模型监控预警
  18. Lessonnbsp;6nbsp;Percynbsp;Bu…
  19. Linux从零学习记录(四)
  20. 1个字节占多少个16进制位

热门文章

  1. stm32f4xx.h文件的详解
  2. go-ethereum相关
  3. 给未来的你---李开复
  4. Java使用付费代理的两种实现方法
  5. Android开发真的要凉凉吗
  6. 如何在开发和生产环境中使用 Docker 容器化 Golang 应用
  7. 高频小信号谐振放大器【Multisim】【高频电子线路】
  8. vue2-3版本笔记
  9. 推荐一些硬核的公众号
  10. 辛辛苦苦写了一个产品,如何获取种子用户?