Given an array of integers and an integer . For every integer of the array a[i], the task is to calculate the count of numbers in the array with value equals to the average of element a[i] and x. That is, the number of occurrences of the (average of element a[i] and x) in the array.
Examples:
Input: arr[] = {2, 0, 4, 6, 2}, x = 2
Output: 2 0 0 1 2
For x = 2, the average values for 2, 0, 4, 6, 2 would be 2, 1, 3, 4, 2 respectively. So, the count array would result in 2, 0, 0, 1, 2.Input: arr[] = {9, 5, 2, 4, 0, 3}, x = 3
Output: 0 1 1 1 0 1
For x = 3, the average values for 9, 5, 2, 4, 0, 3 would be 6, 4, 2, 3, 1, 2 respectively. So, the count array would result in 0, 1, 1, 1, 0, 1.
Approach:
- Traverse the array and map every element with its count of occurrence in the array.
- Now traverse the array again, take the average of the array element and given and check for its value in the map.
Below is the implementation of the above approach:
C++
// CPP program to find the count of // occurrences of the average of array // elements with a given number #include<bits/stdc++.h> using namespace std; // Function to find the count of // occurrences of the average of array // elements with a given number void getAverageCountArray( int a[], int x, int N) { // mp to store count of occurrence // of every array element in the array map< int , int > mp; // Array that stores the average // count for given array int avg[N] = {0}; int val, av; for ( int i = 0; i < N; i++) { // first occurrence of a[i] if (mp[a[i]] == 0) mp[a[i]] = 1; else mp[a[i]]++; // element has already occurred before // so increase its count } for ( int i = 0; i < N; i++) { av = int ((a[i] + x) / 2); if (mp.find(av) != mp.end()) { val = mp[av]; avg[i] = val; } } // Printing the average count array for ( int i = 0; i < N; i++) { cout << avg[i] << " " ; } } // Driver code int main() { int a[] = { 2, 0, 4, 6, 2 }; int x = 2; int N = sizeof (a)/ sizeof (a[0]); getAverageCountArray(a, x, N); } // This code is contributed by // Surendra_Gangwar |
Java
// Java program to find the count of // occurrences of the average of array // elements with a given number import java.io.*; import java.util.*; import java.lang.*; class GFG { // Function to find the count of // occurrences of the average of array // elements with a given number static void getAverageCountArray( int [] a, int x, int N) { // Map to store count of occurrence // of every array element in the array HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); // Array that stores the average // count for given array int [] avg = new int [N]; int val, av; for ( int i = 0 ; i < N; i++) { // first occurrence of a[i] if (!map.containsKey(a[i])) { map.put(a[i], 1 ); } // element has already occurred before // so increase its count else { // gives current count of a[i] val = map.get(a[i]); val++; map.remove(a[i]); map.put(a[i], val); } } for ( int i = 0 ; i < N; i++) { av = (a[i] + x) / 2 ; if (map.containsKey(av)) { val = map.get(av); avg[i] = val; } } // Printing the average count array for ( int i = 0 ; i < N; i++) { System.out.print(avg[i] + " " ); } } // Driver code public static void main(String args[]) { int [] a = { 2 , 0 , 4 , 6 , 2 }; int x = 2 ; int N = a.length; getAverageCountArray(a, x, N); } } |
Python3
# Python3 program to find the count of # occurrences of the average of array # elements with a given number # Function to find the count of # occurrences of the average of array # elements with a given number def getAverageCountArray(a, x, N): # Dictionary to store count of occurrence # of every array element in the array map = {} # Array that stores the average # count for given array avg = [ 0 ] * N for i in range (N): # first occurrence of a[i] if a[i] not in map : map [a[i]] = 1 # element has already occurred before # so increase its count else : # gives current count of a[i] map [a[i]] + = 1 for i in range (N): av = (a[i] + x) / / 2 if av in map : val = map [av] avg[i] = val # Printing the average count array for i in range (N): print (avg[i], end = " " ) if __name__ = = "__main__" : a = [ 2 , 0 , 4 , 6 , 2 ] x = 2 N = len (a) getAverageCountArray(a, x, N) # This code is contributed by Rituraj Jain |
C#
// C# program to find the count of // occurrences of the average of array // elements with a given number using System; using System.Collections.Generic; class GFG { // Function to find the count of // occurrences of the average of array // elements with a given number static void getAverageCountArray( int [] a, int x, int N) { // Map to store count of occurrence // of every array element in the array Dictionary< int , int > map = new Dictionary< int , int >(); // Array that stores the average // count for given array int [] avg = new int [N]; int val, av; for ( int i = 0; i < N; i++) { // first occurrence of a[i] if (!map.ContainsKey(a[i])) { map.Add(a[i], 1); } // element has already occurred before // so increase its count else { // gives current count of a[i] val = map[a[i]]; val++; map.Remove(a[i]); map.Add(a[i], val); } } for ( int i = 0; i < N; i++) { av = (a[i] + x) / 2; if (map.ContainsKey(av)) { val = map[av]; avg[i] = val; } } // Printing the average count array for ( int i = 0; i < N; i++) { Console.Write(avg[i] + " " ); } } // Driver code public static void Main() { int [] a = { 2, 0, 4, 6, 2 }; int x = 2; int N = a.Length; getAverageCountArray(a, x, N); } } // This code is contributed by 29AjayKumar |
Javascript
<script> // JavaScript program to find the count of // occurrences of the average of array // elements with a given number // Function to find the count of // occurrences of the average of array // elements with a given number function getAverageCountArray(a, x, N) { // Map to store count of occurrence // of every array element in the array let map = new Map(); // Array that stores the average // count for given array let avg = Array.from({length: N}, (_, i) => 0); let val, av; for (let i = 0; i < N; i++) { // first occurrence of a[i] if (!map.has(a[i])) { map.set(a[i], 1); } // element has already occurred before // so increase its count else { // gives current count of a[i] val = map.get(a[i]); val++; map. delete (a[i]); map.set(a[i], val); } } for (let i = 0; i < N; i++) { av = (a[i] + x) / 2; if (map.has(av)) { val = map.get(av); avg[i] = val; } } // Printing the average count array for (let i = 0; i < N; i++) { document.write(avg[i] + " " ); } } // Driver Code let a = [ 2, 0, 4, 6, 2 ]; let x = 2; let N = a.length; getAverageCountArray(a, x, N); </script> |
2 0 0 1 2
Time Complexity: O(n log n), where n is the size of the given array.
Auxiliary Space: O(n)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!