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;
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号