题目 给定一个数组和窗口长度,返回每个窗口的最大值
给定一个数组{1,2,3,2,4,2,4,5},和一个窗口长度3,返回每个窗口的最大值
example
window-1 [1,2,3] 返回 3
window-2 [2,3,2] 返回 3
window-3 [3,2,4] 返回 4
下面是代码样例
import java.util.Arrays;
import java.util.LinkedList;
public static int[] printWindow(int[] arr,int w)
{
/**
* 判断窗口有没有超过数组长度
*/
if (arr.length<w)
{
return null;
}
LinkedList<Integer> list=new LinkedList();
//定义返回数组
int[] res=new int[arr.length-w+1];
int index=0;
/**
* 基本原则:
* 1.最大的数的下标,永远放在双端队列的首位
* 2.后来的数跟队尾比较,如果后来的数大则弹出当前队尾的下标(这样可以保证最后小的都弹出)
* 3.当i>=w-1开始,从双端队列中获取队首,保存到res中
*/
for (int i = 0; i < arr.length; i++) {
while (!list.isEmpty()&&arr[list.peekLast()]<=arr[i])
{
list.pollLast();
}
list.addLast(i);
if (list.peekFirst()==i-w)
{
list.pollFirst();
}
if(i>=w-1)
{
res[index++]=arr[list.peekFirst()];
}
}
return res;
}```