Open In App

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

Last Updated : 10 Oct, 2022
Comments
Improve
Suggest changes
Like Article
Like
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)


Next Article
Article Tags :
Practice Tags :

Similar Reads