求一个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公司##笔试题目#
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务