题目描述:

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

如果不存在满足条件的子数组,则返回 0 。

示例 1:

输入:nums = [8,2,4,7], limit = 4
输出:2 
解释:所有子数组如下:
[8] 最大绝对差 |8-8| = 0 <= 4.
[8,2] 最大绝对差 |8-2| = 6 > 4. 
[8,2,4] 最大绝对差 |8-2| = 6 > 4.
[8,2,4,7] 最大绝对差 |8-2| = 6 > 4.
[2] 最大绝对差 |2-2| = 0 <= 4.
[2,4] 最大绝对差 |2-4| = 2 <= 4.
[2,4,7] 最大绝对差 |2-7| = 5 > 4.
[4] 最大绝对差 |4-4| = 0 <= 4.
[4,7] 最大绝对差 |4-7| = 3 <= 4.
[7] 最大绝对差 |7-7| = 0 <= 4. 
因此,满足题意的最长子数组的长度为 2 。
示例 2:

输入:nums = [10,1,2,4,7,2], limit = 5
输出:4 
解释:满足题意的最长子数组是 [2,4,7,2],其最大绝对差 |2-7| = 5 <= 5 。
示例 3:

输入:nums = [4,2,2,2,4,4,2,2], limit = 0
输出:3

思路分析:

一看到子数组等关键词就想到滑动窗口。

本题的重点在于快速求滑动窗口内的最大值和最小值。常见的方法有:

  • 使用 multiset、TreeMap等数据结构;
  • 单调递增队列或者单调递减队列

思路如下:

  • 使用 left 和 right两个指针,分别指向滑动窗口的左右边界;定义 TreeMap保存滑动窗口的所有元素;
  • right主动右移:right 指针每次移动一步,把 A[right] 放入滑动窗口;
  • left被动右移:判断此时窗口内最大值和最小值的差,如果大于 limit,则 left 指针被迫右移,直至窗口内最大值和最小值的差小于等于 limit 为止;left 每次右移之前,需要把 A[left] 从 TreeMap 中减去一次。
  • 滑动窗口长度的最大值就是所求。

代码实现:

class Solution {public int longestSubarray(int[] nums, int limit) {TreeMap<Integer, Integer> m = new TreeMap<>();int left = 0, right = 0;int res = 0;while (right < nums.length) {m.put(nums[right], m.getOrDefault(nums[right], 0) + 1);while (m.lastKey() - m.firstKey() > limit) {m.put(nums[left], m.get(nums[left]) - 1);if (m.get(nums[left]) == 0) {m.remove(nums[left]);}left ++;}res = Math.max(res, right - left + 1);right ++;}return res;}
}

LeetCode-1438. 绝对差不超过限制的最长连续子数组相关推荐

  1. [leetcode]1438. 绝对差不超过限制的最长连续子数组

    个人博客:https://javaniuniu.com/ 难度:中等 本题涉及算法: 滑动窗口 思路:滑动窗口 类似题型: 3. 无重复字符的最长子串 5393. 可获得的最大点数 题目 1438. ...

  2. LeetCode 1438 绝对差不超过限制的最长连续子数组

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

  3. ⭐算法入门⭐《队列 - 单调队列》中等02 —— LeetCode 1438. 绝对差不超过限制的最长连续子数组

  4. 1438. 绝对差不超过限制的最长连续子数组

    链接:1438. 绝对差不超过限制的最长连续子数组 题解: https://leetcode-cn.com/problems/longest-continuous-subarray-with-abso ...

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

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

  6. leetcode1438. 绝对差不超过限制的最长连续子数组

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

  7. [LetCode-1438] 绝对差不超过限制的最长连续子数组

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

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

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

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

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

最新文章

  1. gin将请求体绑定到不同的结构体中
  2. 产品运营必须知道的几个概念,如何进行网页分析?
  3. JavaScript 开发者年度调查报告(2016-01)
  4. 不要笑!写 | 还是 || ,还真是一个问题
  5. leetcode 714. 买卖股票的最佳时机含手续费(dp)
  6. 金山云纳斯达克敲钟上市 不负时代的机遇
  7. 用C实现的一个Bash脚本
  8. 【线代】矩阵转置性质及代码证明
  9. 移动端开发vw+rem布局,即等比缩放布局(什么是vw?如何设置根元素html的字体大小?如何换算vw单位?文末:移动端开发步骤详解链接)
  10. UFS Host基础特性分析 -- 硬件部分
  11. 儿童节html模板,六一儿童节作文350字满分模板
  12. 设计模式-文本编辑器
  13. Reentrantlock和背后金主AQS —————— 开开开山怪
  14. KaLi Linux 安装sougou输入法
  15. “Art-Side艺次元空间+”将携日中之间「龙天无界」联手“蒲公英高级文旅”与“馋艺术空间”赋能古镇
  16. 南方s730手簿说明书_s730手薄
  17. (已更新)最新打卡抽奖助手小程序源码,带微信通知功能,去授权
  18. 用Python进行图文识别(OCR)
  19. 工商银行考试计算机知识,【必读】工商银行考试内容及复习方法
  20. 253云通讯 php curl请求 json格式不对

热门文章

  1. python常用第三方库(转载)
  2. hdu 1134 卡特兰数(大数模板)
  3. Python中的字符串与字符编码
  4. 从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。请采用循环控制语句来实现。...
  5. IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)...
  6. 【译】《Pro ASP.NET MVC4 4th Edition》第三章(二)
  7. 比那 施氏食狮史 还要强的文章
  8. CCF201803-2 碰撞的小球
  9. MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现
  10. 实现服务器和客户端数据交互,Java Socket有妙招