leetcode-1438:绝对差不超过限制的最长连续子数组

简介: 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

解题

方法一:滑动窗口+mulitset

map也是一样的,当值为0的时候erase,其他时候就用++--

class Solution {
public:
    int longestSubarray(vector<int>& nums, int limit) {
        multiset<int> set;
        int l=0;
        int res=0;
        for(int r=0;r<nums.size();r++){
            set.insert(nums[r]);
            while(!set.empty()&&*set.rbegin()-*set.begin()>limit){
                set.erase(set.find(nums[l]));
                l++;
            }
            res=max(res,r-l+1);
        }
        return res;
    }
};
相关文章
|
7月前
|
算法
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
56 0
|
7月前
leetcode-581:最短无序连续子数组
leetcode-581:最短无序连续子数组
35 0
图解LeetCode——剑指 Offer 42. 连续子数组的最大和
图解LeetCode——剑指 Offer 42. 连续子数组的最大和
100 0
【LeetCode】-- 剑指 Offer 42. 连续子数组的最大和
【LeetCode】-- 剑指 Offer 42. 连续子数组的最大和
【LeetCode】-- 剑指 Offer 42. 连续子数组的最大和
|
Java Python
【LeetCode每日一题】剑指 Offer 42. 连续子数组的最大和(持续更新)
【LeetCode每日一题】剑指 Offer 42. 连续子数组的最大和(持续更新)
85 0
|
Oracle 关系型数据库 Java
LeetCode(剑指 Offer)- 42. 连续子数组的最大和
LeetCode(剑指 Offer)- 42. 连续子数组的最大和
87 0
LeetCode(剑指 Offer)- 42. 连续子数组的最大和
|
算法 前端开发 程序员
「LeetCode」剑指Offer-44连续子数组的最大和⚡️
「LeetCode」剑指Offer-44连续子数组的最大和⚡️
110 0
「LeetCode」剑指Offer-44连续子数组的最大和⚡️
【刷穿 LeetCode】最短无序连续子数组 :「双指针 + 排序」&「双指针 + 线性扫描」| 8月更文挑战
【刷穿 LeetCode】最短无序连续子数组 :「双指针 + 排序」&「双指针 + 线性扫描」| 8月更文挑战
【leetcode-剑指 Offer 42】连续子数组的最大和
题目 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
LeetCode——剑指 Offer 42【连续子数组的最大和】
LeetCode——剑指 Offer 42【连续子数组的最大和】
LeetCode——剑指 Offer 42【连续子数组的最大和】