【leetcode】565. Array Nesting

技术【leetcode】565. Array Nesting 【leetcode】565. Array NestingYou are given an integer arraynumsof lengt

565 .数组嵌套

给你一个整数数组,长度是[0,n - 1]范围内数字的排列。

你应该建立一个集合[k]={nums[k],nums[nums[k]],nums[nums[k]]],}遵守以下规则:

第一个元素ins[k]从选择elementnums[k]ofindex=k开始。

下一个元素ins[k]应该是benums[nums[k]],然后是nums[nums[nums[k]]]等等。

我们就在重复元素出现之前停止添加。

返回集合[k]的最长长度。

1、暴力求解方法: 时间复杂度高了 超时了

解决方案类{

公众号:

内部数组列表(矢量nums){ 0

//先用暴力法写这样写时间复杂度太高了相当于o(n^2)

int n=nums。size();

int len=INT _ MIN

for(int I=0;在;(一)

{

无序_ setint res

int索引=I;

while(!res.count(nums[index])

{

RES . insert(nums[索引]);

index=nums[index];

}

len=max(len,(int)RES . size());

}

返回透镜;

}

};

分析:暴力法是对nums中的每一个数字都作为起始数字开始进行数组嵌套嵌套

对于已经遍历过的数字就不需要让他作为开头进行遍历因为其之后的检索路径已经是之前的一个子集合

同时检索的过程中也不需要设置只需要存头数字如果当前数字和头数字一样那么就结束了

2、按照这两个思路 对代码进行优化 用一个dp数组进行存储

解决方案类{

公众号:

内部数组列表(矢量nums){ 0

//先用暴力法写这样写时间复杂度太高了相当于o(n^2)

int n=nums。size();

int len=INT _ MIN

无序_ setint dp//用于存储哪些结点已经访问过了

for(int I=0;在;(一)

{

int索引=I;

if(dp.count(索引))继续;

//DP。插入(索引);//没有访问存储当前路径

无序_ setint res

while(!res.count(nums[index])

{

RES . insert(nums[索引]);

dp.insert(索引);

index=nums[index];

}

len=max(len,(int)RES . size());

}

返回透镜;

}

};

3、取消存储数据的 res 直接存访问的头结点

解决方案类{

公众号:

内部数组列表(矢量nums){ 0

//先用暴力法写这样写时间复杂度太高了相当于o(n^2)

int n=nums。size();

int len=INT _ MIN

无序_ setint dp//用于存储哪些结点已经访问过了

for(int I=0;在;(一)

{

int索引=I;

if(dp.count(索引))继续;

//DP。插入(索引);//没有访问存储当前路径

int front=索引

int tmp _ len=1;

而(前面!=nums[index])

{

//RES . insert(nums[index]);

dp.insert(索引);

index=nums[index];

tmp _ len

}

len=max(len,tmp _ len);

}

返回透镜;

}

};

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/107447.html

(0)

相关推荐

  • 笑的种类,笑的学问和笑的种类有多少

    技术笑的种类,笑的学问和笑的种类有多少笑 心理学家们现在发现笑的种类:笑是人类与他人交流的最古老的方式之一,而在此之前,笑只被看作是人类幽默感的体现。人类笑是为了和别人团结一致或者嘲笑他们,要么用笑和别人调情。我们中的每

    生活 2021年10月20日
  • 怎样实现Mysql 备份与恢复

    技术怎样实现Mysql 备份与恢复怎样实现Mysql 备份与恢复,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。逻辑备份:1.mysqldum

    攻略 2021年11月20日
  • 解析Java对象引用与JVM自动内存管理

    技术解析Java对象引用与JVM自动内存管理 解析Java对象引用与JVM自动内存管理对象引用应用程序设计接口是JDKTM1.2中新定义的。该应用程序设计接口允许应用程序以对象引用的方式与JVM的内存管

    礼包 2021年11月1日
  • 如何解决nginx"504网关超时"错误

    技术如何解决nginx“504 Gateway Time-out”错误这篇文章主要介绍“如何解决nginx“504 Gateway Time-out”错误”,在日常操作中,相信很多人在如何解决nginx“504 Gate

    攻略 2021年12月21日
  • 人物介绍英文,小王子主要人物英文介绍

    技术人物介绍英文,小王子主要人物英文介绍Young Prince narrates is lonely, the sad childs story, he lives ona young star. One day, h

    生活 2021年10月19日
  • SQL基础的查询语句有哪些

    技术SQL基础的查询语句有哪些这篇文章主要介绍“SQL基础的查询语句有哪些”,在日常操作中,相信很多人在SQL基础的查询语句有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL基础的

    攻略 2021年11月10日