题:
有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。
例如,数组为[4,3,5,4,3,3,6,7],窗口大小为3时:
如果数组长度为n,窗口大小为w,则一共产生n-w+1个窗口的最大值。请实现一个函数。
解析代码如下:
public class MaxWindowStack {
//获取窗体里面最值
public static List<Integer> getMaxWindow(int[] arr, int w){
if (arr==null||w<1||arr.length<w){
return null;
}
List<Integer> integers = new LinkedList<>();
for (int i = 0; i <arr.length ; i++) {
List<Integer> list = new ArrayList<>(w);
//判断是否到达原数组的底部
if (i+w==arr.length){
for (int j = i; j <arr.length ; j++) {
list.add(arr[j]);
}
integers.add(Collections.max(list));
break;
}
if (i+w<arr.length){
for (int j = i; j <i+w ; j++) {
list.add(arr[j]);
}
integers.add(Collections.max(list));
}
}
return integers;
}
public static void main(String[] args) {
int[] ints = {4, 3,5,4,2,6,8,5,9};
List<Integer> maxWindow = getMaxWindow(ints, 3);
if (maxWindow!=null){
for (int i = 0; i <maxWindow.size() ; i++) {
System.out.print("第"+(i+1)+"个窗体:");
for (int j = i; j <i+3 ; j++) {
System.out.print(ints[j]+" ");
}
System.out.println("最大值为:"+maxWindow.get(i));
}
}
}
}