Suma de todos los elementos que se repiten ‘k’ veces en una array

Dada una array, tenemos que encontrar la suma de todos los elementos que se repiten k veces en una array. Necesitamos considerar cada elemento repetitivo solo una vez en la suma.
Ejemplos: 
 

Input : arr[] = {2, 3, 9, 9}
            k = 1
Output : 5
2 + 3 = 5

Input : arr[] = {9, 8, 8, 8, 10, 4}
          k = 3
Output : 8

Una solución simple es usar dos bucles anidados para contar las ocurrencias de cada elemento. Mientras contamos, debemos considerar un elemento solo si aún no se ha considerado.
 

C++

// C++ program find sum of elements that
// appear k times.
#include <bits/stdc++.h>
using namespace std;
 
// Function to count the sum
int sumKRepeating(int arr[], int n, int k)
{
    int sum = 0;
 
    // To keep track of processed elements
    vector<bool> visited(n, false);
 
    // initializing count equal to zero
    for (int i = 0; i < n; i++) {
 
        // If arr[i] already processed
        if (visited[i] == true)
            continue;
 
        // counting occurrences of arr[i]
        int count = 1;
        for (int j = i + 1; j < n; j++) {           
            if (arr[i] == arr[j]) {
                count++;
                visited[j] = true;
            }
        }
   
        if (count == k)
           sum += arr[i];
    }
 
    return sum;
}
 
// Driver code
int main()
{
    int arr[] = { 9, 9, 10, 11, 8, 8, 9, 8 };
    int n = sizeof(arr)/sizeof(arr[0]);
    int k = 3;
    cout << sumKRepeating(arr, n, k);
    return 0;
}

Java

// Java program find sum of
// elements that appear k times.
import java.util.*;
 
class GFG
{
// Function to count the sum
static int sumKRepeating(int arr[],
                         int n, int k)
{
    int sum = 0;
 
    // To keep track of
    // processed elements
    Vector<Boolean> visited = new Vector<Boolean>();
     
    for (int i = 0; i < n; i++)
    visited.add(false);
 
    // initializing count
    // equal to zero
    for (int i = 0; i < n; i++)
    {
 
        // If arr[i] already processed
        if (visited.get(i) == true)
            continue;
 
        // counting occurrences of arr[i]
        int count = 1;
        for (int j = i + 1; j < n; j++)
        {        
            if (arr[i] == arr[j])
            {
                count++;
                visited.add(j, true);
            }
        }
 
        if (count == k)
        sum += arr[i];
    }
 
    return sum;
}
 
// Driver code
public static void main(String args[])
{
    int arr[] = { 9, 9, 10, 11,
                  8, 8, 9, 8 };
    int n = arr.length;
    int k = 3;
    System.out.println(sumKRepeating(arr, n, k));
}
}
 
// This code is contributed by Arnab Kundu

Python3

# Python 3 program find sum of elements
# that appear k times.
 
# Function to count the sum
def sumKRepeating(arr, n, k):
    sum = 0
 
    # To keep track of processed elements
    visited = [False for i in range(n)]
 
    # initializing count equal to zero
    for i in range(0, n, 1):
         
        # If arr[i] already processed
        if (visited[i] == True):
            continue
 
        # counting occurrences of arr[i]
        count = 1
        for j in range(i + 1, n, 1):
            if (arr[i] == arr[j]):
                count += 1
                visited[j] = True
     
        if (count == k):
            sum += arr[i]
 
    return sum
 
# Driver code
if __name__ == '__main__':
    arr = [9, 9, 10, 11, 8, 8, 9, 8]
    n = len(arr)
    k = 3
    print(sumKRepeating(arr, n, k))
 
# This code is contributed by
# Shashank_Sharma

C#

// c# program find sum of
// elements that appear k times.
using System;
using System.Collections.Generic;
 
class GFG
{
// Function to count the sum
public static int sumKRepeating(int[] arr,
                                int n, int k)
{
    int sum = 0;
 
    // To keep track of
    // processed elements
    List<bool> visited = new List<bool>();
 
    for (int i = 0; i < n; i++)
    {
        visited.Add(false);
    }
 
    // initializing count
    // equal to zero
    for (int i = 0; i < n; i++)
    {
 
        // If arr[i] already processed
        if (visited[i] == true)
        {
            continue;
        }
 
        // counting occurrences of arr[i]
        int count = 1;
        for (int j = i + 1; j < n; j++)
        {
            if (arr[i] == arr[j])
            {
                count++;
                visited.Insert(j, true);
            }
        }
 
        if (count == k)
        {
            sum += arr[i];
        }
    }
 
    return sum;
}
 
// Driver code
public static void Main(string[] args)
{
    int[] arr = new int[] {9, 9, 10, 11,
                           8, 8, 9, 8};
    int n = arr.Length;
    int k = 3;
    Console.WriteLine(sumKRepeating(arr, n, k));
}
}
 
// This code is contributed
// by Shrikant13

Javascript

<script>
// Javascript program find sum of
// elements that appear k times.
 
// Function to count the sum
function sumKRepeating(arr,n,k)
{
    let sum = 0;
   
    // To keep track of
    // processed elements
    let visited = [];
       
    for (let i = 0; i < n; i++)
        visited.push(false);
   
    // initializing count
    // equal to zero
    for (let i = 0; i < n; i++)
    {
   
        // If arr[i] already processed
        if (visited[i] == true)
            continue;
   
        // counting occurrences of arr[i]
        let count = 1;
        for (let j = i + 1; j < n; j++)
        {        
            if (arr[i] == arr[j])
            {
                count++;
                visited[j]= true;
            }
        }
   
        if (count == k)
            sum += arr[i];
    }
   
    return sum;
}
 
// Driver code
let arr=[9, 9, 10, 11,
                  8, 8, 9, 8 ];
                   
let n = arr.length;
let k = 3;
document.write(sumKRepeating(arr, n, k));
 
// This code is contributed by patel2127
</script>
Producción: 

17

 

Complejidad de tiempo: O(n*n) 
Espacio auxiliar: O(n)
Una solución eficiente es utilizar hashing. Contamos las frecuencias de todos los elementos. Luego recorremos la tabla hash y sumamos aquellos elementos cuyo recuento de ocurrencias es k. 
 

C++

// C++ program find sum of elements that
// appear k times.
#include <bits/stdc++.h>
using namespace std;
 
// Returns sum of k appearing elements.
int sumKRepeating(int arr[], int n, int k)
{
   int sum = 0;
 
   // Count frequencies of all items
   unordered_map<int, int> mp;
   for (int i=0; i<n; i++)
      mp[arr[i]]++;
 
   // Sum items with frequencies equal to k.
   for (auto x : mp)
     if (x.second == k)
        sum += x.first;
   return sum;
}
 
// Driver code
int main()
{
    int arr[] = { 9, 9, 10, 11, 8, 8, 9, 8 };
    int n = sizeof(arr)/sizeof(arr[0]);
    int k = 3;
    cout << sumKRepeating(arr, n, k);
    return 0;
}

Java

// Java program find sum of
// elements that appear k times.
import java.util.HashMap;
import java.util.Map;
 
class GfG
{
 
    // Returns sum of k appearing elements.
    static int sumKRepeating(int arr[], int n, int k)
    {
        int sum = 0;
         
        // Count frequencies of all items
        HashMap<Integer, Integer> mp = new HashMap<>();
        for (int i=0; i<n; i++)
        {
            if (!mp.containsKey(arr[i]))
                mp.put(arr[i], 0);
            mp.put(arr[i], mp.get(arr[i]) + 1);
        }
         
        // Sum items with frequencies equal to k.
        for (Integer x : mp.keySet())
            if (mp.get(x) == k)
                sum += x;
        return sum;
    }
 
    // Driver code
    public static void main(String []args)
    {
         
        int arr[] = { 9, 9, 10, 11, 8, 8, 9, 8 };
        int n = arr.length;
        int k = 3;
 
        System.out.println(sumKRepeating(arr, n, k));
    }
}
 
// This code is contributed by Rituraj Jain

Python3

# Python3 program find Sum of elements
# that appear k times.
import math as mt
 
# Returns Sum of k appearing elements.
def sumKRepeating(arr, n, k):
    Sum = 0
 
# Count frequencies of all items
    mp = dict()
    for i in range(n):
        if arr[i] in mp.keys():
            mp[arr[i]] += 1
        else:
            mp[arr[i]] = 1
                 
# Sum items with frequencies equal to k.
    for x in mp:
        if (mp[x] == k):
            Sum += x
    return Sum
 
# Driver code
arr = [ 9, 9, 10, 11, 8, 8, 9, 8 ]
n = len(arr)
k = 3
print(sumKRepeating(arr, n, k))
 
# This code is contributed
# by Mohit kumar 29

C#

// C# program find sum of
// elements that appear k times.
using System;
using System.Collections.Generic;
class GfG
{
 
    // Returns sum of k appearing elements.
    static int sumKRepeating(int []arr, int n, int k)
    {
        int sum = 0;
         
        // Count frequencies of all items
        Dictionary<int,int> mp = new Dictionary<int,int>();
        for (int i = 0 ; i < n; i++)
        {
            if(mp.ContainsKey(arr[i]))
            {
                var val = mp[arr[i]];
                mp.Remove(arr[i]);
                mp.Add(arr[i], val + 1);
            }
            else
            {
                mp.Add(arr[i], 1);
            }
        }
        // Sum items with frequencies equal to k.
        foreach(KeyValuePair<int, int> entry in mp)
        {
            if(entry.Value >= k)
            {
                sum += entry.Key;
            }
        }
        return sum;
    }
 
    // Driver code
    public static void Main(String []args)
    {
         
        int []arr = { 9, 9, 10, 11, 8, 8, 9, 8 };
        int n = arr.Length;
        int k = 3;
 
        Console.WriteLine(sumKRepeating(arr, n, k));
    }
}
 
// This code contributed by Rajput-Ji

Javascript

<script>
 
// JavaScript program find sum of
// elements that appear k times.
 
// Returns sum of k appearing elements.
function sumKRepeating(arr,n,k)
{
    let sum = 0;
          
        // Count frequencies of all items
        let mp = new Map();
        for (let i=0; i<n; i++)
        {
            if (!mp.has(arr[i]))
                mp.set(arr[i], 0);
            mp.set(arr[i], mp.get(arr[i]) + 1);
        }
          
        // Sum items with frequencies equal to k.
        for (let [key, value] of mp.entries())
            if (mp.get(key) == k)
                sum += key;
        return sum;
}
 
// Driver code
let arr=[9, 9, 10, 11, 8, 8, 9, 8];
let n = arr.length;
let k = 3;
document.write(sumKRepeating(arr, n, k));
 
 
// This code is contributed by unknown2108
 
</script>
Producción: 

17

 

Tiempo Complejidad : O(n) 
Espacio Auxiliar : O(n)
 

Publicación traducida automáticamente

Artículo escrito por AmanSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *