我感觉需要用一个dp[n][2] public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = scanner.nextInt(); } scanner.close(); int[][] dp = new int[n][2]; for (int i = 0; i < n; i++) { if (i > 0 && arr[i] > arr[i - 1]) { dp[i][0] = dp[i - 1][0] + 1; } } for (int i = n - 1; i >= 0; i--) { if (i < n - 1 && arr[i] > arr[i + 1]) { dp[i][1] = dp[i + 1][1] + 1; } } int sum = 0; int count = 0; for (int i = 0; i < n; i++) { sum += (dp[i][0] + 1 + dp[i][1] + dp[i][0] * dp[i][1]) * arr[i]; count += dp[i][0] + 1 + dp[i][1] + dp[i][0] * dp[i][1]; } float result = sum / (float) count; System.out.printf("%.6f", result); }