绝对差不超过限制的最长连续子数组
## 分析
其实这个题显然是一个滑动窗口的问题,但是有一个问题就是怎么快速的窗口间的极值。其实这个维护一下当前窗口里面的最大最小值就好了,但是也可以简单点,维护一个BST,动态的插入和删除。C++STL里面有很多这样的数据结构,比如set,但是这里的元素可能是有重复的,所以使用多重集合multiset这个数据结构就比较easy了。
class Solution {
public:
int longestSubarray(vector<int>& nums, int limit) {
multiset<int>st;
int l=0,r=0;
int ans=0;
while(r<nums.size()){
st.insert(nums[r]);
while(*st.rbegin()-*st.begin()>limit){
st.erase(st.find(nums[l]));
l++;
}
ans=max(ans,r-l+1);
r++;
}
return ans;
}
};