【leetcode每日一题】565数组嵌套

在这里插入图片描述

思路流程:

思路v1.0

  1. 先学会写 s[0] ,用一个ans数组接收元素,每次往ans里添加的时候,先判断一下
    • 这个index会不会超出数组的长度。
    • ans里有没有这个元素。
  2. s[0] 写完,就是用一个for循环,算出所有的 s[i],每次算出来的时候跟最大长度进行比较,维护最大长度。

代码如下:


/*** @param {number[]} nums* @return {number}*/
const getILen = (nums,i) =>{let arr = []arr.push(nums[i])let index = arr[arr.length-1]while(index<nums.length && !arr.includes(nums[index])){arr.push(nums[index])index = arr[arr.length-1]}return arr.length
}
var arrayNesting = function(nums) {let max = 0;for(let i=0;i<nums.length;i++){max = Math.max(max,getILen(nums,i))}return max;
};

思路v1.1

由于index 是 num[i] ,而提示中说 0≤ nums[i]<n ,因此不必考虑index益处的可能性。

代码如下:


/*** @param {number[]} nums* @return {number}*/
const getILen = (nums,i) =>{let arr = []arr.push(nums[i])let index = arr[arr.length-1]while(!arr.includes(nums[index])){arr.push(nums[index])index = arr[arr.length-1]}return arr.length
}
var arrayNesting = function(nums) {let max = 0;for(let i=0;i<nums.length;i++){max = Math.max(max,getILen(nums,i))}return max;
};

在这里插入图片描述

思路v2.0

每次都需要去arr里遍历,时间复杂度很高,因此可以优化。

去arr里遍历 → 每次将nums数组中的一个元素放入到arr时,同时将这个元素改成-1,下次取得时候发现是-1就不取了。当一个for迭代结束,将nums数组恢复。

/*** @param {number[]} nums* @return {number}*/
const getILen = (nums,i) =>{let arr = []let temp = [...nums];while(temp[i]!=-1){arr.push(temp[i]);let index = temp[i];temp[i] = -1;i = index}return arr.length
}
var arrayNesting = function(nums) {let max = 0;for(let i=0;i<nums.length;i++){max = Math.max(max,getILen(nums,i))}return max;
};

在这里插入图片描述

从 854→869

思路v2.1

使用arr存放,再计算arr.length 只是为了计算长度,可以优化点,使用count计数。

/*** @param {number[]} nums* @return {number}*/
const getILen = (nums,i) =>{let count = 0let temp = [...nums];while(temp[i]!=-1){count++;let index = temp[i];temp[i] = -1;i = index}return count
}
var arrayNesting = function(nums) {let max = 0;for(let i=0;i<nums.length;i++){max = Math.max(max,getILen(nums,i))}return max;
};

在这里插入图片描述

从 869→875

思路v3.0

由于

 let temp = [...nums];

的时间复杂度是O(N),因此依然会超时。

看题解发现是省略了这个步骤,我本来以为如果省略了这个步骤就会将原来的nums数组修改掉。会导致下次进入for迭代的时候使用的是被破环的数组。

后来想了很久才发现,下次for循环迭代并不会去取上次for迭代里的元素,原因如下:

在这里插入图片描述

在进行第一次迭代的数据,如果后面的迭代使用到这次的数据,也会是一个重复的链路。

s[0] : 0→5→6→2→0

s[2] : 2→0→5→6→2

原因: arr 元素是没有重复的,如果要取到某个元素,就只能从同一个元素进入。因此,只要某次迭代遍历过一次的元素,下次迭代再遇到,获取到的集合都是同一个,因此可以将这种迭代跳过。

因此,直接破环原始数组,直接不进入迭代!!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

野火霸天虎 STM32F407 学习笔记(六)系统时钟详解

STM32 中级 前言 仍然是学习自野火F407网课。 启动文件详解 作用&#xff1a; 初始化堆栈指针 SP_initial_sp初始化 PC 指针 Reset_Handler初始化中断向量表配置系统时钟调用 C 库函数 _main 初始化用户堆栈&#xff0c;从而最终调用 main 函数去到 C 的世界 栈&#xff…

School training competition ( Second )

A. Medium Number 链接 : Problem - 1760A - Codeforces 就是求三个数的中位数 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std; typedef long long LL; const int N 2e510;inline void …

Java线程同步

认识线程同步 解决方案 方法一&#xff1a;同步代码块 package com.itheima.d3;public class ThreadTest {public static void main(String[] args) {Accout acc new Accout("ICBC-110",100000);new DrawThread(acc,"小明").start();//小明new DrawThread…

Python实现DDos攻击实例详解

文章目录 SYN 泛洪攻击Scapy3k 基本用法代码实现DDos 实现思路argparse 模块socket 模块代码实现Client 端程序测试后记关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案…

Kotlin学习——kt里的集合,Map的各种方法之String篇

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

【算法萌新闯力扣】:回文链表

力扣题目&#xff1a;回文链表 开篇 今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦&#xff01;那从现在起&#xff0c;我的算法题更新会按照算法村的给的路线更新&#xff0c;更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知…

操作系统的中断与异常(408常考点)

为了进行核心态和用户态两种状态的切换&#xff0c;引入了中断机制。 中断是计算机系统中的一种事件&#xff0c;它会打断CPU当前正在执行的程序&#xff0c;转而执行另一个程序或者执行特定的处理程序。中断可以来自外部设备&#xff08;如键盘、鼠标、网络等&#xff09;、软…

振南技术干货集:FFT 你知道?那数字相敏检波 DPSD 呢?(1)

注解目录 1 、DPSD 的基础知识 1.1 应用模型 1.2 原理推导 1.3 硬件 PSD &#xff08;相敏检波&#xff0c;就是从繁乱复杂的信号中将我们关心的信号检出来&#xff0c;同时对相位敏感。 数学原理&#xff0c;逃不掉的&#xff0c;硬着头皮看吧。&#xff09; 2 、DPSD …

【电路笔记】-电阻器颜色代码与阻值计算

电阻器颜色代码与阻值计算 文章目录 电阻器颜色代码与阻值计算1、概述2、计算电阻器颜色代码值3、贴片电阻器 电阻器颜色编码使用色带轻松识别电阻器的电阻值及其百分比容差。 1、概述 由于有许多不同类型的电阻器可用&#xff0c;我们需要形成电阻器颜色代码系统以便能够识别…

Java 注解在 Android 中的使用场景

Java 元注解有 5 种&#xff0c;常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别&#xff0c;有三种&#xff1a; RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中&#xff0c;并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条&#xff0c;无论你拖拽滚动条&#xff0c;选中滚动条之后按键盘…

【论文阅读】TACAN:控制器局域网中通过隐蔽通道的发送器认证

文章目录 摘要一、引言二、相关工作三、系统和对手模型3.1 系统模型对手模型 四、TACAN4.1 TACAN 架构4.2 发送方认证协议4.3 基于IAT的隐蔽通道4.4 基于偏移的隐蔽通道&#xff08;本节公式格式暂未整理&#xff09;4.5 基于LSB的隐蔽通道 摘要 如今&#xff0c;汽车系统与现…

vscode Markdown 预览样式美化多方案推荐

优雅的使用 vscode写 Markdown&#xff0c;预览样式美化 1 介绍 我已经习惯使用 vscode 写 markdown。不是很喜欢他的 markdown 样式&#xff0c;尤其是代码块高亮的样式。当然用 vscode 大家基本上都会选择安装一个Markdown-preview-enhanced的插件&#xff0c;这个插件的确…

SpringBoot定时任务报错Unexpected error occurred in scheduled task原因及其解决方法(亲测有效)

问题 spring boot项目在线上一直正常运行没有错误&#xff0c;然后今天发生了报错&#xff0c;如图 这是一个定时器错误&#xff0c;发生这个报错 主要有两个原因 定时器编写的有错误Scheduled注解方式级别高于资源注入级别&#xff0c;导致了资源注入失败 以下是我的代码 …

单片机学习4——中断的概念

中断的概念&#xff1a; CPU在处理A事件的时候&#xff0c;发生了B事件&#xff0c;请求CPU迅速去处理。&#xff08;中断产生&#xff09; CPU暂时中断当前的工作&#xff0c;转去处理B事件。&#xff08;中断响应和中断服务&#xff09; 待CPU将B事件处理完毕后&#xff0…

【数据结构初阶(5)】链式队列的基本操作实现

文章目录 队列的定义初始化队列队尾入队列队头出队列取队头元素取队尾元素获取队列有效元素个数判断队空销毁队列 因为队列比较简单&#xff0c;关于队列的概念就不过多赘述了&#xff0c;本文只讲链队的基本操作实现 队列的定义 定义队列结点结构 链队中的每个结点都应该包…

Go 数字类型

一、数字类型 1、Golang 数据类型介绍 Go 语言中数据类型分为&#xff1a;基本数据类型和复合数据类型基本数据类型有&#xff1a; 整型、浮点型、布尔型、字符串复合数据类型有&#xff1a; 数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;、接口 2、…

什么是 dropblock

大家好啊&#xff0c;我是董董灿。 之前介绍过 dropout 算法&#xff0c;它在训练神经网络中&#xff0c;可以随机丢弃神经元&#xff0c;是一种防止网络过拟合的方法。 但是在卷积神经网络中&#xff0c;dropout 的表现却不是很好&#xff0c;于是研究人员又搞了一个“结构化…

Python列表:操作与实例分析,你值得一看!

Python列表是一种重要的数据结构&#xff0c;它允许您存储和管理多个数据项。本文将深入探讨Python列表的操作&#xff0c;以及通过具体实例分析如何使用它们&#xff0c;以帮助您更好地理解和优化您的代码。 什么是Python列表&#xff1f; Python列表是一种有序、可变的数据结…

基于51单片机的全自动洗衣机proteus仿真设计

标题目录 &#x1f4ab;51单片机全自动洗衣机proteus仿真设计&#x1f4ab;设计介绍&#x1f4ab;仿真图电动机驱动模块电路设计电源模块电路设计控制按键进水阀和排水阀控制继电器 &#x1f4ab;程序设计main函数 &#x1f4ab;设计报告&#x1f4ab;资料清单&&下载链…