LeetCode 239. Sliding Window Maximum
Sliding Window 的问题,初始想法是优先队列,保存下标,如果移除的下标正好是优先队列的top,pop()。时间复杂度应该是O(nlogn)。
题目要求用O(n),可以利用deque,队首为最大元素,如果移除的元素是最大元素,pop_front()。对于新的待加元素,pop_back() 直到队尾元素>=当前元素。
第一次用deque,熟悉一下操作,应该用的不是很多。
class Solution { public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { int start=0; vector<int> res; deque<int> q; for (int i=0;i<nums.size();++i){ if (!q.empty() && i>=k && nums[i-k]==q.front()) q.pop_front(); while (!q.empty() && nums[i]>q.back()) q.pop_back(); q.push_back(nums[i]); if (i+1>=k) res.push_back(q.front()); } return res; } };

浙公网安备 33010602011771号