【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 = 0
    let 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 元素是没有重复的,如果要取到某个元素,就只能从同一个元素进入。因此,只要某次迭代遍历过一次的元素,下次迭代再遇到,获取到的集合都是同一个,因此可以将这种迭代跳过。

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter工具学习三——CSV文件、关联、断言

Jmeter学习三——CSV文件和关联 jmeter做功能测试和做性能测试的区别CSV数据文件设置&#xff08;读取外部文件&#xff0c;进行分数据驱动&#xff09;文件设置字段介绍&#xff1a;文件名文件编码如果出现编码问题导致的乱码&#xff0c;如何解决&#xff1f; 变量名忽略首行…

Nacos 2.X核心架构源码剖析

概述 注册中心并发处理&#xff0c;1.4.x 写时复制&#xff0c;2.1.0 读写分离&#xff1b;nacos 一般使用 AP 架构&#xff0c;即临时实例&#xff0c;1.4.x 为 http 请求&#xff0c;2.1.0 优化为 gRPC 协议&#xff1b;源码中使用了大量的事件通知机制和异步定时线程池&…

蓝桥杯刷题day01——字符串中的单词反转

题目描述 你在与一位习惯从右往左阅读的朋友发消息&#xff0c;他发出的文字顺序都与正常相反但单词内容正确&#xff0c;为了和他顺利交流你决定写一个转换程序&#xff0c;把他所发的消息 message 转换为正常语序。 注意&#xff1a;输入字符串 message 中可能会存在前导空…

痤疮分类-yolov5 学习过程

实验思路&#xff1a; 实验任务是实现痤疮分类任务&#xff0c;并嵌入在PyQT上。 在目标检测、语义分割、实例分割面前我们选择了目标检测的yolov5.但是我们json文件的标注框全是多边形的&#xff0c;通过脚本文件将json文件转化为yolo模型能够识别的标注框为矩形的txt文件。…

MidJourney笔记(4)-settings

前面已经大概介绍了MidJourney的基础知识,后面我主要是基于实操来分享自己的笔记。可能内容顺序会有点乱,请大家理解。 这次主要是想讲讲settings这个命令。我们只需在控制台输入/settings,然后回车,就可以执行这个命令。 (2023年11月26日版本界面) 可能有些朋友出来的界…

Git的原理与使用(一):Git的基本操作(包含:版本回退)

Git原理与使用一 一.Git的初识与安装1.什么是Git2.如何安装Git1.git命令与git help(Git下的"man手册")2.centos下安装Git3.ubantu下安装Git 二.Git的前置操作与前置知识1.创建Git本地仓库2.配置Git3.理解Git的分区1.工作区2.暂存区3.版本库4.分区关系总结 三.添加文件…

【电路笔记】-快速了解电阻

快速了解电阻 文章目录 快速了解电阻1、概述2、电阻器的组成类型2.1 碳电阻器2.2 薄膜电阻器2.3 绕线电阻器 3、总结 电阻器是所有电子元件中最基本、最常用的元件&#xff0c;人们几乎认为电阻器是理所当然的&#xff0c;但它们在电路中起着至关重要的作用。 1、概述 有许多不…

uniapp基础-教程之HBuilderX基础常识篇02

uniapp创建项目时属性多为vue后缀&#xff1b;其中每个文件中都包含了三段式结构分别是template&#xff1b;script&#xff1b;style形势&#xff0c;分别是前端显示的画面以及js和css样式。 template&#xff1a;说大白话就是给别人看的&#xff0c;我们打开页面就可以看到的…

一维数组传参的本质

一维数组传参的本质 数组我们之前学过了&#xff0c;之前也讲了&#xff0c;数组是可以传递给函数的&#xff0c;这个小节我们讨论一下数组传参的本质。 首先&#xff0c;我们从一个问题开始&#xff0c;我们之前都是在函数外部计算数组的元素个数&#xff0c;那我们可以把函…

【C++】多态(上) 多态 | 虚函数 | 重写 | final、override | 接口继承与实现继承 | 抽象类

一、多态 概念 多态&#xff0c;就是多种状态&#xff0c;即不同的对象去完成同一个行为时会产生出不同的状态。比如&#xff1a;买票时&#xff0c;成人要原价买&#xff0c;学生和老人就可以享受优惠价便宜一点儿。同样是买票这个行为&#xff0c;不同的对象来做就有不同的…

【brpc学习实践九】mbvar及bvar可观测

概念、学习地址 mbvar中有两个类&#xff0c;分别是MVariable和MultiDimension&#xff0c;MVariable是多维度统计的基类&#xff0c;MultiDimension是派生模板类。也是主要用来多多线程计数用的。这里用到再详细去了解即可 https://github.com/luozesong/brpc/blob/master/do…

231127 刷题日报

这周值班。。多少写道题吧&#xff0c;保持每天的手感。老婆给买了lubuladong纸质书&#xff0c;加油卷。 1. 131. 分割回文串 写个这个吧&#xff0c;钉在耻辱柱上的题。 为啥没写出来&#xff1a; 1. 递归树没画对 把树枝只看做是1个字母&#xff0c;而且不清楚树枝和节点…

JAVA:深入探讨String性能优化让你的程序更高效

1、简述 在现代软件开发中&#xff0c;字符串&#xff08;String&#xff09;是一个不可或缺的数据类型&#xff0c;几乎每个应用程序都在某种程度上使用字符串。然而&#xff0c;由于字符串操作的频繁性质&#xff0c;它们可能成为程序性能的瓶颈之一。在本文中&#xff0c;我…

【vue】a-table的斑马纹以及hover样式的修改:

文章目录 一、效果&#xff1a;二、实现&#xff08;以jeecg为例&#xff09;&#xff1a; 一、效果&#xff1a; 二、实现&#xff08;以jeecg为例&#xff09;&#xff1a; // 设置基数行样式 // .ant-table-tbody tr:nth-child(n) { // color: #fff; // }// hover时候每行…

第三节HarmonyOS DevEco Studio了解基本工程目录

一、工程级目录 工程的目录结构如下。 目录详情如下&#xff1a; AppScope&#xff1a;存放应用全局所需要的资源文件。Entry&#xff1a;应用的主模块&#xff0c;存放HarmonyOS应用的代码、资源等。oh_modules&#xff1a;工程的依赖包&#xff0c;存放工程依赖的源文件。b…

【STM32】GPIO输入

1 GPIO输出 1.1 按键简介 按键&#xff1a;常见的输入设备&#xff0c;按下导通&#xff0c;松手断开 按键抖动&#xff1a;由于按键内部使用的是机械式弹簧片来进行通断的&#xff0c;所以在按下和松手的瞬间会伴随有一连串的抖动 1.2 传感器模块简介 传感器模块&#xff…

【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络PM定位模块解析

【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络PM定位模块解析 文章目录 【图像分割】【深度学习】PFNet官方Pytorch代码-PFNet网络PM定位模块解析前言PFNet网络简述主干网络定位模块 Positioning Module通道注意力模块 Channel Attention空间注意力模块 Spatial Att…

1-1、汇编语言概述

语雀原文链接 文章目录 1、机器语言2、汇编语言&#xff08;Assembly Language&#xff09;汇编语言工作过程汇编语言三类指令 3、学习资料电子PDF课件论坛视频教程 1、机器语言 机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器…

古埃及金字塔的修建

从理论上说&#xff0c;古埃及人完全有能力设计并建造出充满各种奇妙细节的胡夫金字塔&#xff0c;但后世还是不断涌现出质疑之声&#xff0c;原因倒也简单&#xff0c;那就是胡夫金字塔实在太大了。据推算&#xff0c;整座金字塔使用大约230万块巨石&#xff0c;总质量可达约5…