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>
arr2[] is subset of arr1[]
Tiempo Complejidad: O (n)