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++
// 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
// 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
# 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#
// 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 // 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 ?> |
6
Recommended Posts:
- Sum of minimum difference between consecutive elements of an array
- k-th smallest absolute difference of two elements in an array
- Absolute Difference of even and odd indexed elements in an Array
- Search an element in an array where difference between adjacent elements is 1
- Maximum difference between group of k-elements and rest of the array.
- Generate original array from difference between every two consecutive elements
- Absolute Difference of all pairwise consecutive elements in an array
- Check if elements of an array can be arranged in a Circle with consecutive difference as 1
- Minimum absolute difference of adjacent elements in a circular array
- Find the winner by adding Pairwise difference of elements in the array until Possible
- Count maximum elements of an array whose absolute difference does not exceed K
- Choose k array elements such that difference of maximum and minimum is minimized
- Find original array from encrypted array (An array of sums of other elements)
- Sum of elements in 1st array such that number of elements less than or equal to them in 2nd array is maximum
- Generate original array from an array that store the counts of greater elements on right
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.