【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)

相关推荐

  • leetcode二叉树的最大距离(leetcode合并两个二叉树)

    技术LeetCode如何找出两棵二叉搜索树中的所有元素这篇文章给大家分享的是有关LeetCode如何找出两棵二叉搜索树中的所有元素的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 一,两棵

    攻略 2021年12月15日
  • SpringBoot中的Bean初始化方法是什么

    技术SpringBoot中的Bean初始化方法是什么本篇内容介绍了“SpringBoot中的Bean初始化方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这

    攻略 2021年11月29日
  • 什么是TeamGantt

    技术什么是TeamGantt本篇内容主要讲解“什么是TeamGantt”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是TeamGantt”吧!  TeamGantt是一款

    攻略 2021年11月12日
  • 如何通过Python爬取网页抖音热门视频

    技术如何通过Python爬取网页抖音热门视频如何通过Python爬取网页抖音热门视频,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言抖音短视频相信大家都听

    攻略 2021年10月26日
  • 黄骨鱼的做法,怎样才能做出好吃又营养的黄骨鱼

    技术黄骨鱼的做法,怎样才能做出好吃又营养的黄骨鱼食材:鲜活黄骨鱼(一般一餐一个人可以吃两至四条黄骨鱼的做法,最好购买新鲜的,可以自己拿回家处理,也可让卖家代劳) 配料:姜、葱、蒜、植物油、盐、味精、酱油、豆瓣酱、红剁椒(

    生活 2021年10月27日
  • 适用于所有人的图形和艺术字设计软件 Art Text中文激活版

    技术适用于所有人的图形和艺术字设计软件 Art Text中文激活版 适用于所有人的图形和艺术字设计软件 Art Text中文激活版Art Text 4 Mac破解版 (艺术字和图标设计软件)
    适用于所

    礼包 2021年12月7日