Encuentre si una array es un subconjunto de otra array usando Map

Dadas dos arrays: arr1[0..m-1] y arr2[0..n-1]. Encuentra si arr2[] es un subconjunto de arr1[] o no. Ambas arrays no están ordenadas. Se puede suponer que los elementos de ambas arrays son distintos.
Ejemplos: 
 

Input: arr1[] = {11, 1, 13, 21, 3, 7},  arr2[] = {11, 3, 7, 1}
Output: arr2[] is a subset of arr1[]

Input: arr1[] = {1, 2, 3, 4, 5, 6},  arr2[] = {1, 2, 4}
Output: arr2[] is a subset of arr1[]

Input: arr1[] = {10, 5, 2, 23, 19},  arr2[] = {19, 5, 3}
Output: arr2[] is not a subset of arr1[]

Enfoque simple: un enfoque simple es ejecutar dos bucles anidados. El bucle exterior recoge todos los elementos de B[] uno por uno. El ciclo interno busca linealmente el elemento elegido por el ciclo externo en A[]. Si se encuentran todos los elementos, imprima Sí, de lo contrario imprima No. Puede consultar la solución aquí .
Enfoque eficiente: cree un mapa para almacenar la frecuencia de cada número distinto presente en A[]. Luego verificaremos si cada número de B[] está presente en el mapa o no. Si está presente en el mapa, disminuiremos el valor de frecuencia para ese número en uno y buscaremos el siguiente número. Si el valor del mapa para cualquier número se convierte en cero, lo borraremos del mapa. Si no se encuentra ningún número de B[] en el mapa, estableceremos el valor de la bandera, romperemos los bucles e imprimiremos No. De lo contrario, imprimiremos Sí.
 

C++

// C++ program to check if an array is
// subset of another array
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if an array is
// subset of another array
 
int isSubset(int a[], int b[], int m, int n)
{
 
    // map to store the values of array a[]
    map<int, int> mp1;
 
    for (int i = 0; i < m; i++)
        mp1[a[i]]++;
 
    // flag value
    int f = 0;
 
    for (int i = 0; i < n; i++) {
        // if b[i] is not present in map
        // then array b[] can not be a
        // subset of array a[]
 
        if (mp1.find(b[i]) == mp1.end()) {
            f = 1;
            break;
        }
 
        // if if b[i] is present in map
        // decrement by one
        else {
            mp1[b[i]]--;
 
            if (mp1[b[i]] == 0)
                mp1.erase(mp1.find(b[i]));
        }
    }
 
    return f;
}
 
// Driver code
int main()
{
    int arr1[] = { 11, 1, 13, 21, 3, 7 };
    int arr2[] = { 11, 3, 7, 1 };
 
    int m = sizeof(arr1) / sizeof(arr1[0]);
    int n = sizeof(arr2) / sizeof(arr2[0]);
 
    if (!isSubset(arr1, arr2, m, n))
        cout<<"arr2[] is subset of arr1[] ";
    else
        cout<<"arr2[] is not a subset of arr1[]";
 
    return 0;
}

Java

// Java program to check if an array is
// subset of another array
import java.util.*;
 
class GFG
{
 
    // Function to check if an array is
    // subset of another array
    static int isSubset(int a[], int b[], int m, int n)
    {
 
        // map to store the values of array a[]
        HashMap<Integer, Integer> mp1 = new
                HashMap<Integer, Integer>();
 
        for (int i = 0; i < m; i++)
            if (mp1.containsKey(a[i]))
            {
                mp1.put(a[i], mp1.get(a[i]) + 1);
            }
            else
            {
                mp1.put(a[i], 1);
            }
 
        // flag value
        int f = 0;
 
        for (int i = 0; i < n; i++)
        {
            // if b[i] is not present in map
            // then array b[] can not be a
            // subset of array a[]
            if (!mp1.containsKey(b[i]))
            {
                f = 1;
                break;
            }
 
            // if if b[i] is present in map
            // decrement by one
            else
            {
                mp1.put(b[i], mp1.get(b[i]) - 1);
 
                if (mp1.get(b[i]) == 0)
                    mp1.remove(b[i]);
            }
        }
 
        return f;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr1[] = { 11, 1, 13, 21, 3, 7 };
        int arr2[] = { 11, 3, 7, 1 };
 
        int m = arr1.length;
        int n = arr2.length;
 
        if (isSubset(arr1, arr2, m, n)!=1)
            System.out.print("arr2[] is subset of arr1[] ");
        else
            System.out.print("arr2[] is not a subset of arr1[]");
    }
}
 
// This code is contributed by Rajput-Ji

Python

# Python program to check if an array is
# subset of another array
 
# Function to check if an array is
# subset of another array
def isSubset(a, b, m, n) :
     
    # map to store the values of array a
    mp1 = {}
    for i in range(m):
        if a[i] not in mp1:
            mp1[a[i]] = 0
        mp1[a[i]] += 1
     
    # flag value
    f = 0
    for i in range(n):
         
        # if b[i] is not present in map
        # then array b can not be a
        # subset of array a
        if b[i] not in mp1:
            f = 1
            break
         
        # if if b[i] is present in map
        # decrement by one
        else :
            mp1[b[i]] -= 1
             
            if (mp1[b[i]] == 0):
                mp1.pop(b[i])
    return f
     
# Driver code
arr1 = [11, 1, 13, 21, 3, 7 ]
arr2 = [11, 3, 7, 1 ]
 
m = len(arr1)
n = len(arr2)
 
if (not isSubset(arr1, arr2, m, n)):
    print("arr2[] is subset of arr1[] ")
else:
    print("arr2[] is not a subset of arr1[]")
 
# This code is contributed by Shubhamsingh10

C#

// C# program to check if an array is
// subset of another array
using System;
using System.Collections.Generic;
 
class GFG
{
 
    // Function to check if an array is
    // subset of another array
    static int isSubset(int []a, int []b, int m, int n)
    {
 
        // map to store the values of array []a
        Dictionary<int, int> mp1 = new
                Dictionary<int, int>();
 
        for (int i = 0; i < m; i++)
            if (mp1.ContainsKey(a[i]))
            {
                mp1[a[i]] = mp1[a[i]] + 1;
            }
            else
            {
                mp1.Add(a[i], 1);
            }
 
        // flag value
        int f = 0;
 
        for (int i = 0; i < n; i++)
        {
            // if b[i] is not present in map
            // then array []b can not be a
            // subset of array []a
            if (!mp1.ContainsKey(b[i]))
            {
                f = 1;
                break;
            }
 
            // if if b[i] is present in map
            // decrement by one
            else
            {
                mp1[b[i]] = mp1[b[i]] - 1;
 
                if (mp1[b[i]] == 0)
                    mp1.Remove(b[i]);
            }
        }
 
        return f;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int []arr1 = {11, 1, 13, 21, 3, 7};
        int []arr2 = {11, 3, 7, 1};
 
        int m = arr1.Length;
        int n = arr2.Length;
 
        if (isSubset(arr1, arr2, m, n) != 1)
            Console.Write("arr2[] is subset of arr1[] ");
        else
            Console.Write("arr2[] is not a subset of arr1[]");
    }
}
 
// This code is contributed by PrinciRaj1992

Javascript

<script>
 
// JavaScript program to check if an array is
// subset of another array
 
// Function to check if an array is
// subset of another array
 
function isSubset(a, b, m, n) {
 
    // map to store the values of array a[]
    let mp = new Map();
 
    for (let i = 0; i < m; i++) {
         if (mp.has(a[i])) {
            mp.set(a[i], mp.get(a[i]) + 1)
        } else {
            mp.set(a[i], 1)
        }
    }
 
    // flag value
    let f = 0;
 
    for (let i = 0; i < n; i++) {
        // if b[i] is not present in map
        // then array b[] can not be a
        // subset of array a[]
 
        if (!mp.has(b[i])) {
            f = 1;
            break;
        }
 
        // if if b[i] is present in map
        // decrement by one
        else {
            mp.set(b[i], mp.get(b[i]) - 1);
 
            if (mp.get(b[i]) == 0)
                mp.delete(b[i]);
        }
    }
 
    return f;
}
 
// Driver code
 
let arr1 = [11, 1, 13, 21, 3, 7];
let arr2 = [11, 3, 7, 1];
 
let m = arr1.length;
let n = arr2.length;
 
if (!isSubset(arr1, arr2, m, n))
    document.write("arr2[] is subset of arr1[] ");
else
    document.write("arr2[] is not a subset of arr1[]");
 
 
// This code is contributed by gfgking
 
</script>
Producción: 

arr2[] is subset of arr1[]

 

Tiempo Complejidad: O (n)
 

Publicación traducida automáticamente

Artículo escrito por soumya7 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 *