给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit .
就是将数据排序,然后在排序好的数据中查找一个最大值和一个最小值,其之间的差值刚刚好大于limit.
multiset 是关联容器的一种,是排序好的集合(元素已经进行了排序),并且允许有相同的元素。
rbegin():指向多重集容器中最后一个元素的反向迭代器
class Solution {
public:
int longestSubarray(vector<int>& nums, int limit) {
multiset<int> m;
int j=0,ans=1;
for(int i=0;i<nums.size();i++)
{
m.insert(nums[i]);
while(!m.empty() && *m.rbegin()-*m.begin()>limit)
m.erase(m.find(nums[j++]));
ans=max(ans,i-j+1);
}
return ans;
}
};