Dadas dos arrays, la tarea es encontrar números que están presentes en la primera array, pero no presentes en la segunda array, usando STL en C++ Ejemplos:
Input: a[] = {1, 2, 3, 4, 5, 10}, b[] = {2, 3, 1, 0, 5} Output: 4 10 Input:a[] = {4, 3, 5, 9, 11}, b[] = {4, 9, 3, 11, 10}; Output: 5
Enfoque: en STL, el método set_difference() se puede usar para encontrar el ‘A-B’ donde A es la primera array y B es la segunda array. Sintaxis:
OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);
A continuación se muestra la implementación del enfoque anterior:
CPP
// C++ simple program to // find elements which are // not present in second array #include <bits/stdc++.h> using namespace std; // Function for finding // elements which are there // in a[] but not in b[]. void findMissing(int a[], int b[], int n, int m) { // Declare a vector to store the result vector<int> v(n + m); // And an iterator to traverse the vector vector<int>::iterator it; // Sort the given arrays sort(a, a + n); sort(b, b + m); // Find the elements in a[] // which are not in b[] it = set_difference(a, a + n, b, b + m, v.begin()); // Now resize the vector to the existing count v.resize(it - v.begin()); // Print the results cout << "The elements in a[]" << " which are not in b[]:\n"; for (it = v.begin(); it != v.end(); ++it) cout << *it << " "; cout << endl; } // Driver code int main() { int a[] = { 1, 2, 6, 3, 4, 5 }; int b[] = { 2, 4, 3, 1, 0 }; int n = sizeof(a) / sizeof(a[0]); int m = sizeof(b) / sizeof(b[1]); findMissing(a, b, n, m); return 0; }
Producción:
The elements in a[] which are not in b[]: 5 6
Complejidad de tiempo: O(nlogn + mlogm), usado para ordenar las arrays dadas
Espacio auxiliar: O(n+m), espacio extra de tamaño (n+m) usado para crear vectores