Open In App

Count occurrences of the average of array elements with a given number

Improve
Improve
Like Article
Like
Save
Share
Report

Given an array of N      integers and an integer x      . 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:  

  1. Traverse the array and map every element with its count of occurrence in the array.
  2. Now traverse the array again, take the average of the array element and given x      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>

                    

Output
2 0 0 1 2 

Time Complexity: O(n log n), where n is the size of the given array.
Auxiliary Space: O(n)



Last Updated : 10 Oct, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads