【小紅書2017年筆試】求一個數組中平均數最大的子陣列
阿新 • • 發佈:2019-02-08
題目:
* 給一個數組,裡邊有N個整數,找長度為K(0<K<N)且平均值最大的子陣列,並把這個最大值輸出來
輸入描述:
* 6 (N的值)
* 1 12 -5 -6 50 3 (含有N個整數的陣列)
* 4 (K的值)
輸出描述:
* 給一個數組,裡邊有N個整數,找長度為K(0<K<N)且平均值最大的子陣列,並把這個最大值輸出來
輸入描述:
* 6 (N的值)
* 1 12 -5 -6 50 3 (含有N個整數的陣列)
* 4 (K的值)
輸出描述:
* 12.75
題目很簡單,時間複雜度O(N)內解決,就是維持一個長度為K的計算視窗,遍歷陣列,進來後一個數則減去視窗內的第一個數,儲存最大的子陣列和。最後除以視窗長度轉換為浮點數輸出即可。
執行結果:import java.util.Scanner; public class AverageOfMaxSubArray { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = Integer.parseInt(in.nextLine()); int[] arr = new int[N]; String str = in.nextLine(); String[] str1 = str.split(" "); for(int i=0; i<N; i++){ arr[i] = Integer.parseInt(str1[i]); } int K = Integer.parseInt(in.nextLine()); int sum = 0; for(int i=0; i<K; i++){ sum += arr[i]; } int max = sum; for(int i=1; i<N-K; i++){ sum =sum + arr[i+K-1] - arr[i-1]; max = Math.max(sum, max); } System.out.println((float)max/K); } }