最长的可整合子数组的长度
题目
先给出可整合数组的定义。如果一个数组在排序后,每相邻两个数的差的绝对值都是1,则该数组为可整合数组。例如,[5,3,4,6,2]排序之后为[2,3,4,5,6],符合条件,所以这个数组为可整合数组。
给定一个整型数组arr,请返回其中最大可整合子数组的长度。例如,[5,5,3,2,6,4,3]的最大可整合子数组为[5,3,2,6,4],所以返回5
思路: 时间复杂度O(N^2)
依旧是穷举每一个子数组,但是在判断子数组是否是可整合数组时并不采用排序的方法,而是采用如下方法:
判断子数组中是否有重复元素,如果有,肯定不是可整合数组。这个过程可以使用哈希表完成。
找到子数组中的最大值max和最小值min,及其相应的下表 i 和 j ,如果 max - min == j - i,则该子数组一定是可整合数组;否则不是。
这个过程的时间复杂度O(1),所有整体的时间复杂度是O(N^2)。实现代码如下:
def getLIL2(arr):import sysif arr == None or len(arr) == 0:return 0length = 0map_ = {}for i in range(len(arr)):max_ = -sys.maxsizemin_ = sys.maxsizefor j in range(i,len(arr)):if arr[j] in map_:breakmap_[arr[j]] = 1max_ = max(arr[j],max_)min_ = min(arr[j],min_)if max_ - min_ = j - i:length = max(length,j-1+1)map_.clear()return length
最长的可整合子数组的长度相关推荐
- 需要排序的最短子数组的长度——是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组...
需要排序的最短子数组的长度 貌似在leetcode上遇到过,就是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组. from:https://blog.csdn.net/behboyh ...
- c语言找出递增子数组的长度,求给定数组的最长递增子序列(记录子序列的值)...
#include using namespace std; const int maxn = 100; int arr[maxn], dp[maxn], pre[maxn]; // pre记录前一个的 ...
- c语言找出递增子数组的长度,编程之美2.16 数组中最长递增子序列的长度
改进的方法看的头大了却还是不清楚,哎...搞算法的苦啊,纠结啊. 编程之美这本书里面就有关于这道题的一些解法,求一个一位数组中的最长序列的长度.例如,在序列1,3,2中,最长递增序列是1,3. 这道题 ...
- leetcode 1438. 绝对差不超过限制的最长连续子数组(滑动窗口+treemap)
给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件的子数组,则返回 ...
- leetcode 978. 最长湍流子数组(动态规划)
978. 最长湍流子数组 当 A 的子数组 A[i], A[i+1], -, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[k] &g ...
- 1438 绝对差不超过限制的最长连续子数组(暴力破解)
1. 问题描述: 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件 ...
- 力扣1438——绝对差不超过限制的最长连续子数组(滑动窗口+单调队列)
题目描述(中等) 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件 ...
- 力扣刷题笔记:1438. 绝对差不超过限制的最长连续子数组(滑窗模板题,选择有序列表SortedList()数据类型就不会超时)
题目: 1438.绝对差不超过限制的最长连续子数组 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 ...
- 【线性 dp】B003_LC_最长湍流子数组(读题 dp / 双指针)
一.Problem 当 A 的子数组 A[i], A[i+1], -, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[k] > ...
最新文章
- 多媒体计算机系统是能进行获取,第六章 7 多媒体计算机系统.pdf
- 亚洲游戏行业遭遇史上最大DDoS攻击,微软:我给扛下来了
- 最新曝光的iPhone大漏洞:传文件会泄露个人隐私,2年多了苹果知而不改
- java编译后的扩展名,Java的源代码扩展名和编译完后是扩展名正确的是
- 周思进:自知“能力不足“让我专注十几年音视频
- 实现基于darknet框架实现CTPN版本自然场景文字检测 与CNN+CTCOCR文字识别的ChineseOCR搭建
- celery mysql 异步_celery配合rabbitmq任务队列实现任务的异步调度执行[celery redis]
- 运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行脚本的问题
- targetFilterLifecycle的作用
- vscode插件推荐2020_2020年,前端开发者必备的10个VS Code扩展插件
- Android颜色选择器库
- (转) 数字加密货币全球资源汇总
- visual studio html插件,实用的 Visual Studio Code 插件
- 四大国有银行股份制改革的确切时间
- Convolution1D与Convolution2D区别
- java加密与解密的艺术.pdf_Java加密与解密的艺术
- uniapp 判断手机网络状态
- 字符串的截取爬虫的时候会用到(数组和列表的区别)
- 软件测试行业一定要懂代码么?想学软测的先看了这篇文章再考虑吧
- 华为hcie考试费用多少钱
热门文章
- WGS 1984 Web Mercator 对于在线地图服务的意义
- swift 用协议实现代理传值功能
- js:进一步关闭(范围:下一个)
- 移动游戏高速增长为市场营销带来新的机会
- forum tribune
- 批处理(.bat)无限循环,定时,固定时间间隔
- 通信原理2习题课汇总(随机信号、信道、最佳接收)
- golang 编译提示 cannot assign interface {} 和golang断言使用
- canal mysql多实例_canal搭建实例
- c c 语言程序设计同步,第一部分C语言程序设计C语言程序设计同步练习答案.PDF...