求给定阵列中子阵列平均值
原文:https://www . geesforgeks . org/find-mean-subarray-mean-given-array/
给你一个 n 元素的数组,你必须找到数组的平均值,作为所有可能的 m 长度数组的所有连续 m 元素的平均值。 示例:
Input :arr[] = {3, 5, 1, 8, 9, 4},
m = 4
Output : Mean = 5.16667
Explanation : {3, 5, 1, 8}, {5, 1, 8, 9},
{1, 8, 9, 4} are three set of m-consecu-
tive elements. Mean of mean of sets
is (17/4 + 23/4 + 22/4 )/ 3
Input : arr[] = {9, 4}, m = 1
Output : Mean = 6.5
Explanation : {9}, {4} are two set of
1-consecutive element. Mean of means
of sets is (9 + 4 )/ 2
一个简单的解决方案是考虑所有 m 大小的子阵,计算它们的均值。最后返回均值的均值。 一个有效的解决方案是使用滑动窗口算法来解决这个问题,在这个问题中,我们找到 m 长度窗口的和,然后将每个窗口的平均值加到一个值和上。最后,我们将通过将总和除以可能的窗口数得到我们的结果,这也是总和/(n-m+1)。
C++
// CPP program to find mean of means
#include <bits/stdc++.h>
using namespace std;
// function to find mean value
float findMean(int arr[], int n, int m)
{
// declare sum and winSum (window sum)
float sum = 0, winSum = 0;
int i = 0;
// find sum for 1st m-length window
for (; i < m; i++)
winSum += arr[i];
sum += (winSum / m);
// iterate over array to find sum
// of all m-length means
for (; i < n; i++) {
winSum = winSum - arr[i - m] + arr[i];
sum += (winSum / m);
}
// mean of means will be sum of means
// divided by no of such means
return (sum / (n - m + 1));
}
// Driver code
int main()
{
int arr[] = { 2, 5, 7, 1, 9, 3, 9 };
int n = sizeof(arr) / sizeof(arr[0]);
int m = 4;
cout << "Mean = " << findMean(arr, n, m);
return 0;
}
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to find mean of means
import java.util.*;
import java.lang.*;
public class GeeksforGeeks{
// function to find mean value
public static float findMean(int arr[], int n,
int m){
// declare sum and winSum (window sum)
float sum = 0, winSum = 0;
int i = 0;
// find sum for 1st m-length window
for (; i < m; i++)
winSum += arr[i];
sum += (winSum / m);
// iterate over array to find sum
// of all m-length means
for (; i < n; i++) {
winSum = winSum - arr[i - m] + arr[i];
sum += (winSum / m);
}
// mean of means will be sum of means
// divided by no of such means
return (sum / (n - m + 1));
}
// driver code
public static void main(String argc[]){
int arr[] = { 2, 5, 7, 1, 9, 3, 9 };
int n = 7;
int m = 4;
System.out.println("Mean = " +
findMean(arr, n, m));
}
}
/*This code is contributed by Sagar Shukla.*/
Python 3
# Python3 program to find mean of means
# function to find mean value
def findMean(arr, n, m) :
# declare sum and winSum (window sum)
sum = float(0)
winSum = float(0)
i = 0
# find sum for 1st m-length window
while (i < m):
winSum = winSum + arr[i]
i = i + 1
sum = sum + (winSum / m);
# iterate over array to find sum
# of all m-length means
while (i < n):
winSum = winSum - arr[i - m] + arr[i]
sum = sum + (winSum / m)
i = i + 1
# mean of means will be sum of means
# divided by no of such means
return (sum / (n - m + 1));
# Driven code
arr = [ 2, 5, 7, 1, 9, 3, 9 ]
n = len(arr)
m = 4
print ("Mean = ", findMean(arr, n, m))
# This code is contributed by "rishabh_jain".
C
// Java program to find mean of means
using System;
public class GeeksforGeeks{
// function to find mean value
public static float findMean(int []arr, int n,
int m)
{
// declare sum and winSum (window sum)
float sum = 0, winSum = 0;
int i = 0;
// find sum for 1st m-length window
for (; i < m; i++)
winSum += arr[i];
sum += (winSum / m);
// iterate over array to find sum
// of all m-length means
for (; i < n; i++) {
winSum = winSum - arr[i - m] + arr[i];
sum += (winSum / m);
}
// mean of means will be sum of means
// divided by no of such means
return (sum / (n - m + 1));
}
// driver code
public static void Main(){
int []arr = { 2, 5, 7, 1, 9, 3, 9 };
int n = 7;
int m = 4;
Console.WriteLine("Mean = " +
findMean(arr, n, m));
}
}
/* This code is contributed by vt_m.*/
服务器端编程语言(Professional Hypertext Preprocessor 的缩写)
<?php
// PHP program to find mean of means
// function to find mean value
function findMean($arr, $n, $m)
{
// declare sum and
// winSum (window sum)
$sum = 0;
$winSum = 0;
$i = 0;
// find sum for 1st
// m-length window
for (; $i < $m; $i++)
$winSum += $arr[ $i];
$sum += ( $winSum / $m);
// iterate over array to find sum
// of all m-length means
for (; $i < $n; $i++)
{
$winSum = $winSum - $arr[ $i - $m] +
$arr[ $i];
$sum += ( $winSum / $m);
}
// mean of means will be sum of means
// divided by no of such means
return ($sum / ($n - $m + 1));
}
// Driver code
$arr = array(2, 5, 7, 1, 9, 3, 9);
$n =count($arr);
$m = 4;
echo "Mean = ", findMean($arr, $n, $m);
// This code is contributed by anuj_67
?>
java 描述语言
<script>
// Javascript program to find mean of means
// function to find mean value
function findMean(arr, n, m)
{
// declare sum and winSum (window sum)
var sum = 0, winSum = 0;
var i = 0;
// find sum for 1st m-length window
for (; i < m; i++)
winSum += arr[i];
sum += (winSum / m);
// iterate over array to find sum
// of all m-length means
for (; i < n; i++) {
winSum = winSum - arr[i - m] + arr[i];
sum += (winSum / m);
}
// mean of means will be sum of means
// divided by no of such means
return (sum / (n - m + 1));
}
// Driver code
var arr = [ 2, 5, 7, 1, 9, 3, 9 ];
var n = arr.length;
var m = 4;
document.write( "Mean = " + findMean(arr, n, m));
</script>
输出:
Mean = 4.9375
版权属于:月萌API www.moonapi.com,转载请注明出处