滑动窗口的最大值

2020-07-24  本文已影响0人  Crazy_Bear
import java.util.*;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size)
    {

        ArrayList<Integer> res = new ArrayList<Integer>();
        if(size <= 0) return res;
        LinkedList<Integer> list = new LinkedList<Integer>();
        for(int i = 0; i<num.length; i++) {
            while(!list.isEmpty() && num[i] > num[list.getLast()]) list.removeLast();
            if(list.size()!=0 && (i - list.getFirst())>= size) list.removeFirst();
            list.add(i);
            if(i>=size-1) res.add(num[list.getFirst()]);
        }
        return res;
    }
}
class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size)
    {
        deque<int> queue;
        vector<int> res;
        for(int i = 0; i < num.size(); i++)
        {
            while(!queue.empty()&&num[queue.back()] < num[i]) queue.pop_back();
            if(!queue.empty()&& i-queue.front() >=size) queue.pop_front();
            queue.push_back(i);
            if(i>=size -1) res.push_back(num[queue.front()]);  
        }
        return res;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读