C练题笔记之: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]之间。
来源:力扣(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. 数组嵌套相关推荐
- LeetCode 565. 数组嵌套
1. 题目 索引从0开始长度为N的数组A,包含0到N - 1的所有整数. 找到最大的集合S并返回其大小,其中 S[i] = {A[i], A[A[i]], A[A[A[i]]], ... }且遵守以下 ...
- C练题笔记之:Leetcode-303. 区域和检索 - 数组不可变
题目: 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= rig ...
- C练题笔记之:Leetcode-307. 区域和检索 - 数组可修改
题目: 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的n ...
- C练题笔记之:Leetcode-1460. 通过翻转子数组使两个数组相等
题目: 给你两个长度相同的整数数组 target 和 arr . 每一步中,你可以选择 arr 的任意 非空子数组 并将它翻转.你可以执行此过程任意次. 如果你能让 arr 变得与 target 相同 ...
- C练题笔记之:Leetcode-12. 整数转罗马数字
题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 1 ...
- C练题笔记之:Leetcode-654. 最大二叉树
题目: 给定一个不重复的整数数组 nums . 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值. 递归地在最大值 左边 的 子数组前缀上 构建左子 ...
- C练题笔记之:Leetcode-2055. 蜡烛之间的盘子
题目: 给你一个长桌子,桌子上盘子和蜡烛排成一列.给你一个下标从 0 开始的字符串 s ,它只包含字符 '*' 和 '|' ,其中 '*' 表示一个 盘子 ,'|' 表示一支 蜡烛 . 同时给你一个下 ...
- C练题笔记之:Leetcode-962. 最大宽度坡
题目: 给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j].这样的坡的宽度为 j - i. 找出 A 中的坡的最大宽度,如果不存在,返回 0 . ...
- C练题笔记之:Leetcode-804. 唯一摩尔斯密码词
题目: 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: 'a' 对应 ".-" , 'b' 对应 "-..." ...
最新文章
- 【spring boot】【thymeleaf】SPEL处理 null 值
- 如何从ERP下载Sales BOM到CRM
- 每日一题:leetcode341.扁平化嵌套列表迭代器
- Java 高级类(上) —— 抽象类和接口
- 地址后面的sessionid怎么消除_水泥地面起灰起砂不平怎么解决?
- 报错,Field cardTypeService in cn.yihuazt.cols.controller.CardTypeController required a bean of type ‘c
- c语言结构体菜单显示框架,请教c语言结构体嵌套问题。field `atItem' has incomplete type...
- 分表扩展全局序列原理_高可用_单表存储千万级_海量存储_分表扩展---MyCat分布式数据库集群架构工作笔记0025
- 低代码工具是软件维护的噩梦?
- WampServer下开启curl
- java argv_argv的编码是什么?
- 系列文章--WF学习资料汇总
- 微信android版6.3.27,微信6.3.27旧版本
- Dxg——立创EDA [LCEDA] 开发笔记整理分类合集【所有的相关记录,都整理在此】
- 尚硅谷谷粒商城之环境搭建
- 利用到路面提取道路中心线的方法
- 第五篇:风控模型监控预警
- Lessonnbsp;6nbsp;Percynbsp;Bu…
- Linux从零学习记录(四)
- 1个字节占多少个16进制位