生成窗口最大值数组(java实现)

一、题目

    有一个整形数组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;
      }  
}

四、运行结果截图


五、总结

        这种题目属于锻炼了数组和循环的编程思想,难度简单。如果大家有更好的方法,欢迎在下面评论!

猜你喜欢

转载自blog.csdn.net/alan_gaohaodong/article/details/79314979