原题题目
代码实现(首刷自解 单调栈344ms 超百分之25)
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> s;
vector<int> ret;
int size = nums.size();
for(int i=0;i<size;++i)
{
if(s.size() && i-k>=0 && nums[i-k] == s.back()) s.pop_back();
if(s.size() && nums[i] > s.back()) s.clear();
else while(s.size() && nums[i] > s.front()) s.pop_front();
if(s.size() < k) s.emplace_front(nums[i]);
if(i>=k-1) ret.emplace_back(s.back());
}
return ret;
}
};
代码实现(二刷自解 DAY 168 C++)
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> l;
vector<int> ret;
for(int i=0;i<k;++i)
{
while(l.size() && l.front() < nums[i]) l.pop_front();
l.emplace_front(nums[i]);
}
for(int i=0;i<=nums.size()-k;++i)
{
ret.emplace_back(l.back());
if(l.back() == nums[i]) l.pop_back();
if(i != nums.size()-k)
{
while(l.size() && l.front() < nums[i+k]) l.pop_front();
l.emplace_front(nums[i+k]);
}
}
return ret;
}
};
代码实现(三刷自解 DAY 203 C++)
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> deque;
vector<int> ret;
int size = nums.size();
for(int i = 0;i < size;++i)
{
if(i >= k && !deque.empty() && nums[i-k] == deque.front())
deque.pop_front();
if(deque.empty()) deque.emplace_back(nums[i]);
else
{
while(!deque.empty() && deque.back() < nums[i]) deque.pop_back();
deque.emplace_back(nums[i]);
}
if(i >= k-1) ret.emplace_back(deque.front());
}
return ret;
}
};
代码实现(四刷小部分看解 - - DAY 282 C++)
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> deque;
vector<int> ret;
int size = nums.size();
for (int i = 0; i < size; ++i) {
if (i >= k && deque.front() == nums[i - k]) {
deque.pop_front();
}
while (!deque.empty() && deque.back() < nums[i])
deque.pop_back();
deque.emplace_back(nums[i]);
if (i >= k - 1) ret.emplace_back(deque.front());
}
return ret;
}
};
代码实现(五刷自解 DAY 5 Golang)
func maxSlidingWindow(nums []int, k int) []int {
deq, ret := []int{}, []int{}
for i := 0; i < k; i++ {
for len(deq) != 0 && nums[i] > deq[len(deq) - 1] {
deq = deq[:len(deq) - 1]
}
deq = append(deq, nums[i])
}
ret = append(ret, deq[0])
for i := k; i < len(nums); i++ {
if deq[0] == nums[i - k] {
deq = deq[1:]
}
for len(deq) != 0 && nums[i] > deq[len(deq) - 1] {
deq = deq[:len(deq) - 1]
}
deq = append(deq, nums[i])
ret = append(ret, deq[0])
}
return ret
}