關於滑動視窗的題目,大概有兩類,一類是「子串」問題;一類是「用單調佇列來解決」的問題
一、「子串問題」
labuladong大佬在這裡總結了滑動視窗這類問題的**框架,很實用。
二、「用單調佇列來解決」的問題
//加入單調佇列
q.push(value); //
加入佇列
}
intpop_front()
int ans =q.front();
if (ans == d.front())
q.pop();
return ans; //
返回pop出的那個數}};
//存下標的目的是知道滑動視窗是否包含乙個陣列中的數字
}
for (int i=k; i//
已經形成視窗
maxinwindow.push_back(nums[index.front()]); //
佇列首部的肯定是最大值
if (!index.empty() && index.front() <= (int)(i-k))
while (!index.empty() && nums[i] >= nums[index.back()])
index.push_back(i);
}maxinwindow.push_back(nums[index.front()]);
//最後乙個視窗的最大值
}
return
maxinwindow;}};
滑動視窗題目總結
最典型的滑動視窗題目 right要找到新字元,才加1,擴大視窗 left要發現舊字元就加1,縮小視窗,直到right處的flag s right 值變為0,right才繼續增加 需要注意的就是right 的位置,需要考慮清楚 define max x,y x y x y int lengthoflo...
滑動視窗型別題目
3.無重複字元的最長子串 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是1.滑動視窗本質是控制左右指標怎麼移動這裡有指標是一直往前走的,那麼左指標呢,當當前右指標指向的元素重複時左指標直接跳到這個已重複元素的下乙...
滑動視窗總結
滑動視窗思想 視窗由兩個指標構成,乙個左指標left,乙個右指標right,然後 left,right 表示的索引範圍是乙個視窗了。右指標right的功能是用來擴充套件視窗 當視窗內的條件沒有達到題目要求時,我們需要不斷移動右指標right直到視窗內的條件第一次滿足題目要求為止。左指標left的功能...