【搞定算法】最长的可整合子数组的长度

本文探讨了如何找到整型数组中的最长可整合子数组,即排序后相邻元素差的绝对值为1的子数组。提供了暴力求解的O(N^3logN)方法和优化后的O(N^2)解决方案,后者通过检查子数组是否有重复值和最大值与最小值的关系来判断是否可整合。
摘要由CSDN通过智能技术生成

题目:最长的可整合子数组的长度。给定一个整型数组 arr,请返回其中最大可整合子数组的长度。例如:[5,5,3,2,6,4,3] 的最大可整合子数组为[5,3,2,6,4],所以返回 5。

先给出可整合数组的定义:如果一个数组在排序之后,每相邻两个数差的绝对值都为 1,则该数组为可整合数组。例如:[5,3,4,6,2] 排序之后为 [2,3,4,5,6],符合每相邻两个数差的绝对值都为 1,所以这个数组为可整合数组。

 分析:

1、暴力:

列出所有的子数组【N^2】,然后再对每个子数组复制,再排序(NlogN),再遍历看满不满足,共 O(N^3logN) 【子数组:数组中一个或连续的多个整数组成一个子数组】;

2、优化:

以后看到复杂的标准先自己改为简洁的标准。新的标准:一个数组如果是可整合的:

1)无重复值;

2)最大值减去最小值等于数组个数减 1 的话,则是可整合的。

则尝试所有的子数组的复杂度为 O(N^2),判

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值