这道题目的是典型的滑动窗口问题,需要维护窗口里面最大值和最小值,要实现这一点,可以利用map(set不行,因为会有重的,要用
O(nlogn)的实现map
class Solution {
public:
int longestSubarray(vector<int>& nums, int limit) {
// 维护滑动窗口里的最大值以及最小值
map<int,int> treemap;
int res = 0;
for(int i=0,j=0;i<nums.size();i++){
while(j<nums.size()){
treemap[nums[j]]++;
if(treemap.rbegin()->first-treemap.begin()->first<=limit){
res = max(res,j-i+1);
j++;
}else{
treemap[nums[j]]--;