LeetCode-1438. 绝对差不超过限制的最长连续子数组
题目描述:
给你一个整数数组 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. 绝对差不超过限制的最长连续子数组相关推荐
- [leetcode]1438. 绝对差不超过限制的最长连续子数组
个人博客:https://javaniuniu.com/ 难度:中等 本题涉及算法: 滑动窗口 思路:滑动窗口 类似题型: 3. 无重复字符的最长子串 5393. 可获得的最大点数 题目 1438. ...
- LeetCode 1438 绝对差不超过限制的最长连续子数组
题目链接 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件的子数组 ...
- ⭐算法入门⭐《队列 - 单调队列》中等02 —— LeetCode 1438. 绝对差不超过限制的最长连续子数组
- 1438. 绝对差不超过限制的最长连续子数组
链接:1438. 绝对差不超过限制的最长连续子数组 题解: https://leetcode-cn.com/problems/longest-continuous-subarray-with-abso ...
- leetcode 1438. 绝对差不超过限制的最长连续子数组(滑动窗口+treemap)
给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件的子数组,则返回 ...
- leetcode1438. 绝对差不超过限制的最长连续子数组
给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件的子数组,则返回 ...
- [LetCode-1438] 绝对差不超过限制的最长连续子数组
题目 - letcode1438 难度 - 中等 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 l ...
- 力扣刷题笔记:1438. 绝对差不超过限制的最长连续子数组(滑窗模板题,选择有序列表SortedList()数据类型就不会超时)
题目: 1438.绝对差不超过限制的最长连续子数组 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 ...
- 力扣1438——绝对差不超过限制的最长连续子数组(滑动窗口+单调队列)
题目描述(中等) 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件 ...
最新文章
- gin将请求体绑定到不同的结构体中
- 产品运营必须知道的几个概念,如何进行网页分析?
- JavaScript 开发者年度调查报告(2016-01)
- 不要笑!写 | 还是 || ,还真是一个问题
- leetcode 714. 买卖股票的最佳时机含手续费(dp)
- 金山云纳斯达克敲钟上市 不负时代的机遇
- 用C实现的一个Bash脚本
- 【线代】矩阵转置性质及代码证明
- 移动端开发vw+rem布局,即等比缩放布局(什么是vw?如何设置根元素html的字体大小?如何换算vw单位?文末:移动端开发步骤详解链接)
- UFS Host基础特性分析 -- 硬件部分
- 儿童节html模板,六一儿童节作文350字满分模板
- 设计模式-文本编辑器
- Reentrantlock和背后金主AQS —————— 开开开山怪
- KaLi Linux 安装sougou输入法
- “Art-Side艺次元空间+”将携日中之间「龙天无界」联手“蒲公英高级文旅”与“馋艺术空间”赋能古镇
- 南方s730手簿说明书_s730手薄
- (已更新)最新打卡抽奖助手小程序源码,带微信通知功能,去授权
- 用Python进行图文识别(OCR)
- 工商银行考试计算机知识,【必读】工商银行考试内容及复习方法
- 253云通讯 php curl请求 json格式不对
热门文章
- python常用第三方库(转载)
- hdu 1134 卡特兰数(大数模板)
- Python中的字符串与字符编码
- 从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。请采用循环控制语句来实现。...
- IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)...
- 【译】《Pro ASP.NET MVC4 4th Edition》第三章(二)
- 比那 施氏食狮史 还要强的文章
- CCF201803-2 碰撞的小球
- MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现
- 实现服务器和客户端数据交互,Java Socket有妙招