/**
* 最大生成窗口:
* n-w+1个res
*
* res[]每个状态的最大值
* 设窗口大小:3
* 2 1 4 -5 6 7
* 7 0 5 8
* 5 -1 1 3
* preMax=0
* curMax=0
* k=0
*
* i=0遍历数组
*
* 使用Queue实现:
* 0、判断要求w<=arr.length且w>0
* 1、小于3时需入队列,判断是否越界即i+1<=length
* 未越界:若长度还小于3,继续执行步骤1
* 越界:退出循环
* 2、长度为3时,循环出入队列3次,累加和存入res[k]
*
* 3、出队列,长度变成2,执行步骤1
*
*
* 2 ,2 1,2 1 4 , 1 4 -5, 4 -5 6, -5 6 7, 6 7 _
* 小于3 7 0 5 8 越界
*
*/
public static void getMaxWindow(int[] arr,int w){
if(arr==null||w>arr.length){
return;
}
Queue<Integer> queue=new LinkedList<Integer>();
int res=arr.length-w+1;
int index=0;
int max=0;
int tmp=0;
int last=0;
for(int i=0;i<res;i++){
while(queue.size()<w&&index<arr.length){
queue.offer(arr[index]);
tmp+=arr[index];
index++;
}
//System.out.println(tmp);
if(tmp>max){
max=tmp;
last=index;
}
tmp-=queue.poll();
}
System.out.println("最大值:"+max);
System.out.print("最大窗口:");
for(int i=last-w;i<last;i++){
System.out.print(arr[i]+" ");
}
}
数组最大生成窗口
最新推荐文章于 2022-11-29 16:44:07 发布