📌  相关文章
📜  数组中重复“k”次的所有元素的总和

📅  最后修改于: 2021-10-27 06:57:36             🧑  作者: Mango

给定一个数组,我们必须找到数组中重复 k 次的所有元素的总和。我们只需要考虑总和中的每个重复元素一次。
例子:

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

一个简单的解决方案是使用两个嵌套循环来计算每个元素的出现次数。在计数时,我们只需要考虑一个尚未考虑的元素。

C++
// C++ program find sum of elements that
// appear k times.
#include 
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 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 visited = new Vector();
     
    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 visited = new List();
 
    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


C++
// C++ program find sum of elements that
// appear k times.
#include 
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 mp;
   for (int i=0; i


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 mp = new HashMap<>();
        for (int i=0; i


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 mp = new Dictionary();
        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 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


输出:
17

时间复杂度: O(n*n)
辅助空间: O(n)
一个有效的解决方案是使用散列。我们计算所有项目的频率。然后我们遍历哈希表并对出现次数为k的项目求和。

C++

// C++ program find sum of elements that
// appear k times.
#include 
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 mp;
   for (int i=0; i

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 mp = new HashMap<>();
        for (int i=0; i

蟒蛇3

# 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 mp = new Dictionary();
        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 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


输出:
17

时间复杂度: O(n)
辅助空间: O(n)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程