标签:[] 结构 出队 new 否则 输入 模拟 print public
输入数组arr={4,3,5,4,3,3,6,7},窗口大小w=3,窗口由左向右移动,输出每个窗口最大值组成的数组。
import java.util.LinkedList;
public class Main {
public static void main(String args[]) {
int[] arr= {4,3,5,4,3,3,6,7};
int w=3;
int[] maxValArr=getWinMaxVal(arr,w);
for(int i=0;i<maxValArr.length;++i) {
System.out.println(maxValArr[i]);
}
}
public static int[] getWinMaxVal(int[] arr,int w) {
int[] maxValArr=new int[arr.length-w+1];
LinkedList<Integer> maxQue=new LinkedList<>();
for(int i=0;i<arr.length;++i) {
while(!maxQue.isEmpty()&&arr[maxQue.peekLast()]<arr[i]) {
maxQue.pollLast();
}
maxQue.addLast(i);
while(maxQue.peekFirst()<=i-w) {
maxQue.pollFirst();
}
if(i>=w-1) {
maxValArr[i-w+1]=arr[maxQue.peekFirst()];
}
}
return maxValArr;
}
}
[程序员代码面试指南]栈和队列-生成窗口最大值数组(双端队列)
标签:[] 结构 出队 new 否则 输入 模拟 print public
原文地址:https://www.cnblogs.com/coding-gaga/p/10865207.html