package com.interview.books.leetcode; import com.interview.utils.ConsoleWriter; import java.util.ArrayDeque; import java.util.Deque; /** * Created_By: stefanie * Date: 14-12-11 * Time: 上午10:58 */ public class LCS6_MaxInSlidingWindow { public int[] maxElements(int[] A, int window){ int[] B = new int[A.length - window + 1]; Deque<Integer> queue = new ArrayDeque<>(); for (int i = 0; i < window; i++) { while (!queue.isEmpty() && A[i] >= A[queue.peekLast()]) queue.pollLast(); queue.add(i); } for(int i = window; i < A.length; i++){ B[i-window] = A[queue.peekFirst()]; while (!queue.isEmpty() && A[i] >= A[queue.peekLast()]) queue.pollLast(); if(!queue.isEmpty() && queue.peekFirst() <= i - window) queue.pollFirst(); queue.add(i); } B[A.length - window] = A[queue.peekFirst()]; return B; } public static void main(String[] args){ LCS6_MaxInSlidingWindow maxFinder = new LCS6_MaxInSlidingWindow(); int[] A = new int[]{1, 3, -1, -3, 5, 3, 6, 7}; int[] B = maxFinder.maxElements(A, 3); //3,3,5,5,6,7 ConsoleWriter.printIntArray(B); } }