一、绝对值不超过限制的最长连续子数组的长度--滑动窗口
给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。
如果不存在满足条件的子数组,则返回 0 。
示例 1:
输入:nums = [8,2,4,7], limit = 4
输出:2
通过维护一个动态窗口,在滑动窗口中快速的求出最大值与最小值,若满足limit限制。求滑动窗口的大小。
这里通过left、right两个指针维护滑窗,注意:若滑窗满足限制则将right右移动,若滑窗不满足限制需要left右移动。
代码实现:
class Solution {
public:
int longestSubarray(vector<int>& nums, int limit) {
int left= 0;
int right=0;
multiset<int> st;
int res = 0;
while(right<nums.size()){
st.insert(nums[right]);
while(*st.rbegin()-*st.begin()>limit){
st.erase(st.find(nums[left]));
left++;
}
res = max(res,right-left+1);
right++;
}
return res;
}
};
C++中的multiset维护了序列有序且可以含有相同数字,红黑树实现。求问:平时用的Python2中实在没想到有什么现成的数据结构等同于multiset呢?
二、含有重复数字的数组---滑动窗口
给你一个整数