美文网首页
239 Sliding Window Maximum

239 Sliding Window Maximum

作者: 火焰婆婆 | 来源:发表于2015-09-11 07:35 被阅读0次

    239
    Sliding Window Maximum
    22.1%
    Hard

    优先级队列 nlogn 不是线性时间
    提示1 用链表。 每次移动 = 加入元素 + 删除元素
    在这两步操作上思考
    加入元素可以优化
    如果新加入元素,比之前元素大,那么之前元素没用了(因为比新元素先被删除),可以删除。

    public class Solution {
        public int[] maxSlidingWindow(int[] nums, int k) {
            if (nums.length == 0) return new int[0];
            LinkedList<Integer> valList = new LinkedList<Integer>();
            LinkedList<Integer> indexList = new LinkedList<Integer>();
            int[] rst = new int[nums.length - k + 1];
            for (int i = 0; i<k ; i++)
                addNumber(valList, indexList, nums[i], i);
            rst[0] = valList.peekFirst();
            for (int i=k; i<nums.length; i++){
                // add [i], remove [i-k]
                addNumber(valList, indexList, nums[i], i);
                if (indexList.peekFirst() == i-k){
                    valList.pollFirst();
                    indexList.pollFirst();
                }
                rst[i-k+1] = valList.peekFirst();
            }
            return rst;
        }
        private void addNumber(LinkedList<Integer> valList, LinkedList<Integer> indexList, int val, int index){
            while (!valList.isEmpty() && valList.peekLast()<=val){
                valList.pollLast();
                indexList.pollLast();
            }
            valList.addLast(val);
            indexList.addLast(index);
        }
    }
    

    相关文章

      网友评论

          本文标题:239 Sliding Window Maximum

          本文链接:https://www.haomeiwen.com/subject/ctupcttx.html