//题目:给定一个数组和滑动窗口的大小,找出滑动窗口的最大值
//比如数组为:{2,3,4,2,6,2,5,1},滑动窗口的大小为3:
//输出:{4,4,6,6,6,5}
public class SllidWindow {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] datas = {2,3,4,2,6,2,5,1};
for(int i : findMaxInWindow(datas, 3)){
System.out.print(i);
}
}
public static int[] findMaxInWindow(int[] datas,int size){
int[] res = new int[datas.length-size+1];
LinkedList<Integer> queue = new LinkedList<Integer>();
for(int i = 0;i<size;i++){
if(!queue.isEmpty()&&datas[i]>=datas[queue.getLast()]){
queue.removeLast();
}
queue.addLast(i);
}
for(int i = size;i<datas.length;i++){
res[i-size] = datas[queue.getFirst()];
if(!queue.isEmpty()&&datas[i]>=datas[queue.getLast()]){
queue.removeLast();
}
if(!queue.isEmpty()&&(i-queue.getFirst())>=size){
queue.removeFirst();
}
queue.addLast(i);
}
res[res.length-1] = datas[queue.getFirst()];
return res;
}
}