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++ 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;
} |
// 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 |
# 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 |
// 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 |
<?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 ?> |
<script> // Javascript 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)
{ var arraySum = 0;
// Find the mean of second array
for ( var i = 0; i < n; i++)
arraySum += arr2[i];
var mean = (arraySum / n);
// Find sum of elements from array1
// whose difference with mean in not more than k
var sumOfElements = 0;
var difference;
for ( var 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 var arr1 = [ 1, 2, 3, 4, 7, 9 ];
var arr2 = [ 0, 1, 2, 1, 1, 4 ];
var k = 2;
var m, n;
m = arr1.length; n = arr2.length; document.write( findSumofEle(arr1, m, arr2, n, k)); </script> |
6
Time Complexity: O(n + m)
Auxiliary Space: O(1)