题目

  先给出可整合数组的定义。如果一个数组在排序后,每相邻两个数的差的绝对值都是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

最长的可整合子数组的长度相关推荐

  1. 需要排序的最短子数组的长度——是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组...

    需要排序的最短子数组的长度 貌似在leetcode上遇到过,就是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组. from:https://blog.csdn.net/behboyh ...

  2. c语言找出递增子数组的长度,求给定数组的最长递增子序列(记录子序列的值)...

    #include using namespace std; const int maxn = 100; int arr[maxn], dp[maxn], pre[maxn]; // pre记录前一个的 ...

  3. c语言找出递增子数组的长度,编程之美2.16 数组中最长递增子序列的长度

    改进的方法看的头大了却还是不清楚,哎...搞算法的苦啊,纠结啊. 编程之美这本书里面就有关于这道题的一些解法,求一个一位数组中的最长序列的长度.例如,在序列1,3,2中,最长递增序列是1,3. 这道题 ...

  4. leetcode 1438. 绝对差不超过限制的最长连续子数组(滑动窗口+treemap)

    给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件的子数组,则返回 ...

  5. leetcode 978. 最长湍流子数组(动态规划)

    978. 最长湍流子数组 当 A 的子数组 A[i], A[i+1], -, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[k] &g ...

  6. 1438 绝对差不超过限制的最长连续子数组(暴力破解)

    1. 问题描述: 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件 ...

  7. 力扣1438——绝对差不超过限制的最长连续子数组(滑动窗口+单调队列)

    题目描述(中等) 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件 ...

  8. 力扣刷题笔记:1438. 绝对差不超过限制的最长连续子数组(滑窗模板题,选择有序列表SortedList()数据类型就不会超时)

    题目: 1438.绝对差不超过限制的最长连续子数组 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 ...

  9. 【线性 dp】B003_LC_最长湍流子数组(读题 dp / 双指针)

    一.Problem 当 A 的子数组 A[i], A[i+1], -, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[k] > ...

最新文章

  1. 多媒体计算机系统是能进行获取,第六章 7 多媒体计算机系统.pdf
  2. 亚洲游戏行业遭遇史上最大DDoS攻击,微软:我给扛下来了
  3. 最新曝光的iPhone大漏洞:传文件会泄露个人隐私,2年多了苹果知而不改
  4. java编译后的扩展名,Java的源代码扩展名和编译完后是扩展名正确的是
  5. 周思进:自知“能力不足“让我专注十几年音视频
  6. 实现基于darknet框架实现CTPN版本自然场景文字检测 与CNN+CTCOCR文字识别的ChineseOCR搭建
  7. celery mysql 异步_celery配合rabbitmq任务队列实现任务的异步调度执行[celery redis]
  8. 运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行脚本的问题
  9. targetFilterLifecycle的作用
  10. vscode插件推荐2020_2020年,前端开发者必备的10个VS Code扩展插件
  11. Android颜色选择器库
  12. (转) 数字加密货币全球资源汇总
  13. visual studio html插件,实用的 Visual Studio Code 插件
  14. 四大国有银行股份制改革的确切时间
  15. Convolution1D与Convolution2D区别
  16. java加密与解密的艺术.pdf_Java加密与解密的艺术
  17. uniapp 判断手机网络状态
  18. 字符串的截取爬虫的时候会用到(数组和列表的区别)
  19. 软件测试行业一定要懂代码么?想学软测的先看了这篇文章再考虑吧
  20. 华为hcie考试费用多少钱

热门文章

  1. WGS 1984 Web Mercator 对于在线地图服务的意义
  2. swift 用协议实现代理传值功能
  3. js:进一步关闭(范围:下一个)
  4. 移动游戏高速增长为市场营销带来新的机会
  5. forum tribune
  6. 批处理(.bat)无限循环,定时,固定时间间隔
  7. 通信原理2习题课汇总(随机信号、信道、最佳接收)
  8. golang 编译提示 cannot assign interface {} 和golang断言使用
  9. canal mysql多实例_canal搭建实例
  10. c c 语言程序设计同步,第一部分C语言程序设计C语言程序设计同步练习答案.PDF...