Suma no superpuesta de dos conjuntos

Dadas dos arrays A[] y B[] de tamaño n. Se da que ambas arrays contienen elementos distintos individualmente. Necesitamos encontrar la suma de todos los elementos que no son comunes.

Ejemplos: 

Input : A[] = {1, 5, 3, 8}
        B[] = {5, 4, 6, 7}
Output : 29
1 + 3 + 4 + 6 + 7 + 8 = 29

Input : A[] = {1, 5, 3, 8}
        B[] = {5, 1, 8, 3}
Output : 0
All elements are common.

Método de fuerza bruta: un enfoque simple es que para cada elemento en A[] verifique si está presente en B[], si está presente, luego agréguelo al resultado. De manera similar, recorra B[] y para cada elemento que no esté presente en B, agréguelo al resultado. 
Complejidad Temporal: O(n 2 ).

Concepto de hashing: cree un hash vacío e inserte elementos de ambas arrays en él. Ahora recorra la tabla hash y agregue todos los elementos cuyo recuento sea 1. (Según la pregunta, ambas arrays tienen elementos distintos individualmente)

A continuación se muestra la implementación del enfoque anterior:

C++

// CPP program to find Non-overlapping sum
#include <bits/stdc++.h>
using namespace std;
 
 
// function for calculating
// Non-overlapping sum of two array
int findSum(int A[], int B[], int n)
{
    // Insert elements of both arrays
    unordered_map<int, int> hash;   
    for (int i = 0; i < n; i++) {
        hash[A[i]]++;
        hash[B[i]]++;
    }
 
    // calculate non-overlapped sum
    int sum = 0;
    for (auto x: hash)
        if (x.second == 1)
            sum += x.first;
     
    return sum;
}
 
// driver code
int main()
{
    int A[] = { 5, 4, 9, 2, 3 };
    int B[] = { 2, 8, 7, 6, 3 };
     
    // size of array
    int n = sizeof(A) / sizeof(A[0]);
 
    // function call
    cout << findSum(A, B, n);
    return 0;
}

Java

// Java program to find Non-overlapping sum
import java.io.*;
import java.util.*;
 
class GFG
{
 
    // function for calculating
    // Non-overlapping sum of two array
    static int findSum(int[] A, int[] B, int n)
    {
        // Insert elements of both arrays
        HashMap<Integer, Integer> hash = new HashMap<>();
        for (int i = 0; i < n; i++)
        {
            if (hash.containsKey(A[i]))
                hash.put(A[i], 1 + hash.get(A[i]));
            else
                hash.put(A[i], 1);
 
            if (hash.containsKey(B[i]))
                hash.put(B[i], 1 + hash.get(B[i]));
            else
                hash.put(B[i], 1);
        }
 
        // calculate non-overlapped sum
        int sum = 0;
        for (Map.Entry entry : hash.entrySet())
        {
            if (Integer.parseInt((entry.getValue()).toString()) == 1)
                sum += Integer.parseInt((entry.getKey()).toString());
        }
 
        return sum;
 
    }
 
    // Driver code
    public static void main(String args[])
    {
        int[] A = { 5, 4, 9, 2, 3 };
        int[] B = { 2, 8, 7, 6, 3 };
 
        // size of array
        int n = A.length;
 
        // function call
        System.out.println(findSum(A, B, n));
    }
}
 
// This code is contributed by rachana soma

Python3

# Python3 program to find Non-overlapping sum
from collections import defaultdict
 
# Function for calculating
# Non-overlapping sum of two array
def findSum(A, B, n):
 
    # Insert elements of both arrays
    Hash = defaultdict(lambda:0)
    for i in range(0, n):
        Hash[A[i]] += 1
        Hash[B[i]] += 1
 
    # calculate non-overlapped sum
    Sum = 0
    for x in Hash:
        if Hash[x] == 1:
            Sum += x
     
    return Sum
 
# Driver code
if __name__ == "__main__":
 
    A = [5, 4, 9, 2, 3]
    B = [2, 8, 7, 6, 3]
     
    # size of array
    n = len(A)
 
    # Function call
    print(findSum(A, B, n))
     
# This code is contributed
# by Rituraj Jain

C#

// C# program to find Non-overlapping sum
using System;
using System.Collections.Generic;
     
class GFG
{
 
    // function for calculating
    // Non-overlapping sum of two array
    static int findSum(int[] A, int[] B, int n)
    {
        // Insert elements of both arrays
        Dictionary<int, int> hash = new Dictionary<int, int>();
        for (int i = 0; i < n; i++)
        {
            if (hash.ContainsKey(A[i]))
            {
                var v = hash[A[i]];
                hash.Remove(A[i]);
                hash.Add(A[i], 1 + v);
            }
            else
                hash.Add(A[i], 1);
 
            if (hash.ContainsKey(B[i]))
            {
                var v = hash[B[i]];
                hash.Remove(B[i]);
                hash.Add(B[i], 1 + v);
            }
            else
                hash.Add(B[i], 1);
        }
 
        // calculate non-overlapped sum
        int sum = 0;
        foreach(KeyValuePair<int, int> entry in hash)
        {
            if ((entry.Value) == 1)
                sum += entry.Key;
        }
 
        return sum;
 
    }
 
    // Driver code
    public static void Main(String []args)
    {
        int[] A = { 5, 4, 9, 2, 3 };
        int[] B = { 2, 8, 7, 6, 3 };
 
        // size of array
        int n = A.Length;
 
        // function call
        Console.WriteLine(findSum(A, B, n));
    }
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// JavaScript program to find Non-overlapping sum
 
// function for calculating
// Non-overlapping sum of two array
function findSum(A, B, n) {
    // Insert elements of both arrays
    let hash = new Map();
    for (let i = 0; i < n; i++) {
        if (hash.has(A[i]))
            hash.set(A[i], 1 + hash.get(A[i]));
        else
            hash.set(A[i], 1);
 
        if (hash.has(B[i]))
            hash.set(B[i], 1 + hash.get(B[i]));
        else
            hash.set(B[i], 1);
    }
 
    // calculate non-overlapped sum
    let sum = 0;
    for (let entry of hash) {
        if (parseInt((entry[1]).toString()) == 1)
            sum += parseInt((entry[0]).toString());
    }
 
    return sum;
 
}
 
// Driver code
 
let A = [5, 4, 9, 2, 3];
let B = [2, 8, 7, 6, 3];
 
// size of array
let n = A.length;
 
// function call
document.write(findSum(A, B, n));
 
// This code is contributed by gfgking
 
</script>
Producción

39

Complejidad Temporal: O(n), ya que la inserción en un mapa desordenado se amortiza constante.
Espacio Auxiliar: O(n).

Este artículo es una contribución de Aarti_Rathi . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por Shivam.Pradhan 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 *