Sum of elements in an array whose difference with the mean of another array is less than k

Given two unsorted arrays arr1[] and arr2[]. Find the sum of elements from arr1[] whose difference with the mean of arr2[] is < k.

Examples:

Input: arr1[] = {1, 2, 3, 4, 7, 9}, arr2[] = {0, 1, 2, 1, 1, 4}, k = 2
Output: 6
Mean of 2nd array is 1.5.
Hence, 1, 2, 3 are the only elements
whose difference with mean is less than 2



Input: arr1[] = {5, 10, 2, 6, 1, 8, 6, 12}, arr2[] = {6, 5, 11, 4, 2, 3, 7}, k = 4
Output: 5

Approach: Calculate the mean of the second array and then traverse the first array and calculate the sum of those elements whose absolute difference with mean is < k.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <iostream>
using namespace std;
  
// Function for finding sum of elements
// whose diff with mean is not more than k
int findSumofEle(int arr1[], int m,
                 int arr2[], int n, int k)
{
    float arraySum = 0;
  
    // Find the mean of second array
    for (int i = 0; i < n; i++)
        arraySum += arr2[i];
    float mean = arraySum / n;
  
    // Find sum of elements from array1
    // whose difference with mean in not more than k
    int sumOfElements = 0;
    float difference;
  
    for (int i = 0; i < m; i++) {
        difference = arr1[i] - mean;
        if ((difference < 0) && (k > (-1) * difference)) {
            sumOfElements += arr1[i];
        }
        if ((difference >= 0) && (k > difference)) {
            sumOfElements += arr1[i];
        }
    }
  
    // Return result
    return sumOfElements;
}
  
// Driver code
int main()
{
    int arr1[] = { 1, 2, 3, 4, 7, 9 };
    int arr2[] = { 0, 1, 2, 1, 1, 4 };
    int k = 2;
    int m, n;
  
    m = sizeof(arr1) / sizeof(arr1[0]);
    n = sizeof(arr2) / sizeof(arr2[0]);
  
    cout << findSumofEle(arr1, m, arr2, n, k);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach 
class GFG
{
      
// Function for finding sum of elements 
// whose diff with mean is not more than k 
static int findSumofEle(int []arr1, int m, 
                int []arr2, int n, int k) 
    float arraySum = 0
  
    // Find the mean of second array 
    for (int i = 0; i < n; i++) 
        arraySum += arr2[i]; 
    float mean = arraySum / n; 
  
    // Find sum of elements from array1 
    // whose difference with mean in not more than k 
    int sumOfElements = 0
    float difference = 0
  
    for (int i = 0; i < m; i++) 
    
        difference = arr1[i] - mean; 
        if ((difference < 0) && (k > (-1) * difference)) 
        
            sumOfElements += arr1[i]; 
        
        if ((difference >= 0) && (k > difference)) 
        
            sumOfElements += arr1[i]; 
        
    
  
    // Return result 
    return sumOfElements; 
  
// Driver code 
public static void main (String[] args)
{
    int []arr1 = { 1, 2, 3, 4, 7, 9 }; 
    int []arr2 = { 0, 1, 2, 1, 1, 4 }; 
    int k = 2
  
    int m = arr1.length; 
    int n = arr2.length; 
  
    System.out.println(findSumofEle(arr1, m, arr2, n, k)); 
}
  
// This code is contributed by mits

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
  
# Function for finding sum of elements
# whose diff with mean is not more than k
def findSumofEle(arr1, m, arr2, n, k):
    arraySum = 0
  
    # Find the mean of second array
    for i in range(n):
        arraySum += arr2[i]
    mean = arraySum / n
  
    # Find sum of elements from array1
    # whose difference with mean 
    # is not more than k
    sumOfElements = 0
    difference = 0
  
    for i in range(m):
  
        difference = arr1[i] - mean
  
        if ((difference < 0) and (k > (-1) * difference)):
            sumOfElements += arr1[i]
  
        if ((difference >= 0) and (k > difference)):
            sumOfElements += arr1[i]
  
    # Return result
    return sumOfElements
  
# Driver code
arr1 = [ 1, 2, 3, 4, 7, 9]
arr2 = [ 0, 1, 2, 1, 1, 4]
k = 2
  
m = len(arr1)
n = len(arr2)
  
print(findSumofEle(arr1, m, arr2, n, k))
  
# This code is contributed by mohit kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach 
using System; 
  
class GFG
{
      
// Function for finding sum of elements 
// whose diff with mean is not more than k 
static int findSumofEle(int []arr1, int m, 
                int []arr2, int n, int k) 
    float arraySum = 0; 
  
    // Find the mean of second array 
    for (int i = 0; i < n; i++) 
        arraySum += arr2[i]; 
    float mean = arraySum / n; 
  
    // Find sum of elements from array1 
    // whose difference with mean in not more than k 
    int sumOfElements = 0; 
    float difference = 0; 
  
    for (int i = 0; i < m; i++) 
    
        difference = arr1[i] - mean; 
        if ((difference < 0) && (k > (-1) * difference)) 
        
            sumOfElements += arr1[i]; 
        
        if ((difference >= 0) && (k > difference)) 
        
            sumOfElements += arr1[i]; 
        
    
  
    // Return result 
    return sumOfElements; 
  
// Driver code 
static void Main() 
    int []arr1 = { 1, 2, 3, 4, 7, 9 }; 
    int []arr2 = { 0, 1, 2, 1, 1, 4 }; 
    int k = 2; 
  
    int m = arr1.Length; 
    int n = arr2.Length; 
  
    Console.WriteLine(findSumofEle(arr1, m, arr2, n, k)); 
}
  
// This code is contributed by mits

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of the approach 
  
// Function for finding sum of elements 
// whose diff with mean is not more than k 
function findSumofEle($arr1, $m, $arr2, $n, $k
    $arraySum = 0; 
  
    // Find the mean of second array 
    for ($i = 0; $i < $n; $i++) 
        $arraySum += $arr2[$i]; 
          
    $mean = $arraySum / $n
  
    // Find sum of elements from array1 
    // whose difference with mean 
    // is not more than k 
    $sumOfElements = 0; 
  
    for ($i = 0; $i < $m; $i++) 
    
        $difference = $arr1[$i] - $mean
        if (($difference < 0) && 
            ($k > (-1) * $difference))
        
            $sumOfElements += $arr1[$i]; 
        
        if (($difference >= 0) && 
            ($k > $difference))
        
            $sumOfElements += $arr1[$i]; 
        
    
  
    // Return result 
    return $sumOfElements
  
// Driver code 
$arr1 = array( 1, 2, 3, 4, 7, 9 ); 
$arr2 = array( 0, 1, 2, 1, 1, 4 ); 
$k = 2; 
  
$m = count($arr1);
$n = count($arr2);
  
print(findSumofEle($arr1, $m
                   $arr2, $n, $k)); 
  
// This code is contributed by Ryuga 
?>

chevron_right


Output:

6


My Personal Notes arrow_drop_up

Discovering ways to develop a plane for soaring career goals

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.