link
![](https://img2020.cnblogs.com/blog/1929461/202005/1929461-20200503124805243-1460212871.png)
class Solution {
public:
int longestSubarray(vector<int>& nums, int limit) {
int n=nums.size();
deque<int> maxdq;
deque<int> mindq;
int right=0;
int left=0;
int res=1;
while(right<n){
while(!maxdq.empty() && nums[right]>nums[maxdq.back()]){
maxdq.pop_back();
}
maxdq.push_back(right);
while(!mindq.empty() && nums[right]<nums[mindq.back()]){
mindq.pop_back();
}
mindq.push_back(right);
while(nums[maxdq.front()]-nums[mindq.front()]>limit){
if(maxdq.front()==left) maxdq.pop_front();
if(mindq.front()==left) mindq.pop_front();
++left;
}
res=max(res,right-left+1);
right++;
}
return res;
}
};