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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.Deque;
import java.util.LinkedList;

class Solution {
    public int longestSubarray(int[] nums, int limit) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        Deque<Integer> min = new LinkedList<>();
        Deque<Integer> max = new LinkedList<>();
        int ans = 0;
        int left = 0;
        for (int i = 0; i < nums.length; ++i) {
            while (!min.isEmpty() && nums[min.peekLast()] >= nums[i]) {
                min.pollLast();
            }
            min.offerLast(i);
            while (!max.isEmpty() && nums[max.peekLast()] <= nums[i]) {
                max.pollLast();
            }
            max.offerLast(i);


            while (nums[max.peekFirst()] - nums[min.peekFirst()] > limit) {
                if (max.peekFirst() < min.peekFirst()) {
                    if (left <= max.peekFirst()) {
                        left = max.pollFirst() + 1;
                    }
                } else {
                    if (left <= min.peekFirst()) {
                        left = min.pollFirst() + 1;
                    }
                }
            }

            ans = Math.max(ans, i - left + 1);
        }

        return ans;
    }
}
posted @ 2022-01-25 14:02  Tianyiya  阅读(39)  评论(0)    收藏  举报