一、题目
有一个整形数组arr和一个大小为w的窗口从数组最左边滑到最右边,窗口每次向右边滑一个位置。
例如,数组为[4,3,5,4,3,3,6,7],窗口大小为3时:
[4,3,5],4,3,3,6,7 窗口中最大值为5
4,[3,5,4],3,3,6,7 窗口中最大值为5
4,3,[5,4,3],3,6,7 窗口中最大值为5
4,3,5,[4,3,3],6,7 窗口中最大值为4
4,3,5,4,[3,3,6],7 窗口中最大值为6
4,3,5,4,3,[3,6,7] 窗口中最大值为7
如果数组的长度为n,窗口大小为w,则一共产生n-w+1个窗口的最大值。
二、解析
此题目的难度不大,属于水题,所以具体过程不写了,直接看下面的代码即可!具体的解答也可以从下面源代码的注释中看到。
三、可运行代码
import java.util.Arrays; public class MaxArrOfWindow { public static void main(String[] args) { int[] arr = new int[] {4,3,5,4,3,3,6,7}; //定义一个数组 int w = 3; //定义一个变量n = 3,表示窗口的长度为3 int[] res = new int[arr.length-w+1]; //定义一个数组,用来获取getArr函数返回的值 MaxArrOfWindow maxArrOfWindow = new MaxArrOfWindow(); res = maxArrOfWindow.getArr(arr, w); for(int i = 0;i<arr.length-w+1;i++) { //遍历打印结果 System.out.println(res[i]); } } public static int[] getArr(int[] arr,int w) { int n = arr.length; //定义一个变量n,并赋值数组的长度 int[] res = new int[n-w+1]; //定义一个数组res,用来存取最后的最大值数组 int[] window = new int[w]; //定义一个数组window,用来放每次不同窗口的数值 for(int i = 0;i<n-w+1;i++) { //外层循环用来控制总窗口数 int m = i; for(int j = 0;j<w;j++) { //内层循环用来控制每一次窗口内获取最大值 window[j] = arr[m++]; } Arrays.sort(window); res[i] = window[w-1]; } return res; } }
四、运行结果截图
五、总结
这种题目属于锻炼了数组和循环的编程思想,难度简单。如果大家有更好的方法,欢迎在下面评论!