天天看點

生成視窗最大值數組(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;
      }  
}
           

四、運作結果截圖

生成視窗最大值數組(java實作)

五、總結

        這種題目屬于鍛煉了數組和循環的程式設計思想,難度簡單。如果大家有更好的方法,歡迎在下面評論!

上一篇: 封裝request
下一篇: node-request()