给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。
如果不存在满足条件的子数组,则返回0。
观摩大佬的。俺不会做啊
class Solution {
public:
int longestSubarray(vector<int>& nums, int limit) {
int res = 0;
deque<int> mins, maxs;
int l = 0;
for (int i = 0; i < nums.size(); i++) {
while (!mins.empty() && nums[mins.back()] >= nums[i]) {
mins.pop_back();
}
mins.emplace_back(i);
while (!maxs.empty() && nums[maxs.back()] <= nums[i]) {
maxs.pop_back();
}
maxs.emplace_back(i);
while (l <= i && nums[maxs.front()] - nums[mins.front()] > limit) {
if (l >= mins.front()) mins.pop_front();
if (l >= maxs.front()) maxs.pop_front();
l++;
}
res = max(res, i - l + 1);
}
return res;
}
};
该博客介绍了一个算法问题,即寻找一个整数数组中,任意两个元素之间的绝对差不超过给定限制的最长连续子数组的长度。提供的C++代码实现使用了双端队列(deque)来维护当前子数组的最小值和最大值,通过不断更新队列并移动窗口边界找到符合条件的最长子数组。
730

被折叠的 条评论
为什么被折叠?



