当前位置: 首页 > news >正文

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

提示:

  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^9
  • 0 <= limit <= 10^9

题解

与滑动窗口最大值类似,维护一个max队列保证队首为最大值,维护一个min队列保证队首为最小值,枚举right更新答案

class Solution {public int longestSubarray(int[] nums, int limit) {//利用两个双端队列,max从左到右单调递增,队首为最大值,min相反Deque<Integer> maxdeque = new ArrayDeque<>();Deque<Integer> mindeque = new ArrayDeque<>();int n = nums.length;int right = 0, left = 0, ans = 0;//枚举rightwhile (right < n) {while (!maxdeque.isEmpty() && nums[right] > maxdeque.peekLast()) {maxdeque.removeLast();}while (!mindeque.isEmpty() && nums[right] < mindeque.peekLast()) {mindeque.removeLast();}maxdeque.addLast(nums[right]);mindeque.addLast(nums[right]);//移动leftwhile (maxdeque.peekFirst() - mindeque.peekFirst() > limit) {//更新对内元素if (maxdeque.peekFirst() == nums[left]) {maxdeque.removeFirst();}if (mindeque.peekFirst() == nums[left]) {mindeque.removeFirst();}left++;}ans = Math.max(ans, right - left + 1);right++;}return ans;}
}

相关文章:

  • SQL触发器
  • Hadoop架构、Hive相关知识点及Hive执行流程
  • 个人app编程的好处及条件
  • CSS知识点梳理(一)
  • element ui中Select 选择器,自定义显示内容
  • Word2Vec的缺点
  • 将 ONLYOFFICE 文档编辑器与 С# 群件平台集成
  • Python开源项目RestoreFormer(++)——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践
  • Debian 9 Stretch APT问题
  • 接口测试及常用接口测试工具
  • 前端小技巧: 数组reduce方法的五种常见用途
  • 矢量图形编辑软件Boxy SVG mac中文版软件特点
  • Python制作国旗头像
  • 深度学习之pytorch第一课
  • 烟草5G智慧工厂数字孪生可视化平台,赋能烟草工业数字化智慧转型
  • Android框架之Volley
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • echarts花样作死的坑
  • Effective Java 笔记(一)
  • Linux下的乱码问题
  • tab.js分享及浏览器兼容性问题汇总
  • Vue.js-Day01
  • vue学习系列(二)vue-cli
  • 测试如何在敏捷团队中工作?
  • 搞机器学习要哪些技能
  • 工作中总结前端开发流程--vue项目
  • 关于Java中分层中遇到的一些问题
  • 回流、重绘及其优化
  • 聊聊flink的TableFactory
  • 如何选择开源的机器学习框架?
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 我感觉这是史上最牛的防sql注入方法类
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​MySQL主从复制一致性检测
  • #include<初见C语言之指针(5)>
  • #LLM入门|Prompt#3.3_存储_Memory
  • $.ajax()方法详解
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (十一)c52学习之旅-动态数码管
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)原始图像数据和PDF中的图像数据
  • .Net mvc总结
  • .NET 的程序集加载上下文
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • @EnableWebMvc介绍和使用详细demo
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [100天算法】-不同路径 III(day 73)
  • [AAuto]给百宝箱增加娱乐功能
  • [Android Pro] Notification的使用
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟