LeetCode 5402. 绝对差不超过限制的最长连续子数组
原题链接
中等
作者:
贺谦
,
2020-05-03 14:56:15
,
所有人可见
,
阅读 658
参考wzc大佬的题解AC的代码,要学习的还有很多
class Solution {
public:
int longestSubarray(vector<int>& A, int k) {
int n = A.size();
deque<int> d1, d2;
int ans = 0;
for(int i = 0, j = 0; i < n; i ++)
{
// d1不空的时候
while(!d1.empty() && A[i] >= A[d1.back()])
d1.pop_back();
d1.push_back(i);
// d2不空的时候
while(!d2.empty() && A[i] <= A[d2.back()]) // **1
d2.pop_back();
d2.push_back(i);
while(!d1.empty() && !d2.empty() && A[d1.front()] - A[d2.front()] > k)
{
j ++;
while(!d1.empty() && d1.front() < j) d1.pop_front();
while(!d2.empty() && d2.front() < j) d2.pop_front();
}
ans = max(ans, i - j + 1);
}
return ans;
}
};