求一个offer,360第二题,感觉还是很麻烦
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = sc.nextInt(); } float[] dp = new float[n + 1]; int[] sum = new int[n + 1]; float[] maxMean; maxMean = maxMean(n, nums); for (int i = 1; i <= m; i++) { sum[i] += sum[i - 1] + nums[i - 1]; } dp[m] = (float) sum[m] / m; float res = Float.MIN_VALUE; for (int i = m + 1; i <= n; i++) { sum[i] = nums[i - 1] + sum[i - 1]; dp[i] = (float) (sum[i] - sum[i - m]) / m; if (dp[i] > maxMean[i - m]) { continue; } else { int j = i - m - 1; while (dp[i] < maxMean[j] && j >= 0) { dp[i] = (float) (sum[i] - sum[j]) / (i - j); } } res = Math.max(res, dp[i]); } String sres = String.format("%.3f", res); System.out.println(sres); } public static float[] maxMean(int n, int[] nums) { float[] res = new float[n + 1]; int i = 1, j = 0; while (i <= n) { if (nums[i - 1] > res[i - 1]) { res[i] = nums[i - 1]; j = i - 1; }else{ res[i] = (res[i - 1] * (i - j - 1) + nums[i - 1]) / (i - j); } i++; } return res; } }
#360公司##笔试题目#