Dadas dos arrays A[] y B[] que constan de N enteros, la tarea es comprobar si cada elemento de la array B[] se puede formar sumando dos elementos cualesquiera de la array A[] . Si es posible, imprima “ Sí” . De lo contrario, escriba “ No” .
Ejemplos:
Entrada: A[] = {3, 5, 1, 4, 2}, B[] = {3, 4, 5, 6, 7}
Salida: Sí
Explicación:
B[0] = 3 = (1 + 2) = A[2] + A[4],
B[1] = 4 = (1 + 3) = A[2] + A[0],
B[2] = 5 = (3 + 2) = A[0 ] + A[4],
B[3] = 6 = (2 + 4) = A[4] + A[3],
B[4] = 7 = (3 + 4) = A[0] + A[ 3]Entrada: A[] = {1, 2, 3, 4, 5}, B[] = {1, 2, 3, 4, 5}
Salida: No
Enfoque:
siga los pasos a continuación para resolver el problema:
- Almacene cada elemento de B[] en un Set .
- Para cada par de índices (i, j) del arreglo A[], verifique si A[i] + A[j] está presente en el conjunto. Si se determina que es cierto, elimine A[i] + A[j] del conjunto .
- Si el conjunto se vacía, imprima “ Sí” . De lo contrario, escriba “ No” .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to implement // the above approach #include using namespace std; // Function to check if each element // of B[] can be formed by adding two // elements of array A[] string checkPossible(int A[], int B[], int n) { // Store each element of B[] unordered_set values; for (int i = 0; i < n; i++) { values.insert(B[i]); } // Traverse all possible pairs of array for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { // If A[i] + A[j] is present in // the set if (values.find(A[i] + A[j]) != values.end()) { // Remove A[i] + A[j] from the set values.erase(A[i] + A[j]); if (values.empty()) break; } } } // If set is empty if (values.size() == 0) return "Yes"; // Otherwise else return "No"; } // Driver Code int main() { int N = 5; int A[] = { 3, 5, 1, 4, 2 }; int B[] = { 3, 4, 5, 6, 7 }; cout << checkPossible(A, B, N); }
Java
// Java program to implement // the above approach import java.io.*; import java.util.*; class GFG{ // Function to check if each element // of B[] can be formed by adding two // elements of array A[] static String checkPossible(int A[], int B[], int n) { // Store each element of B[] Set values = new HashSet(); for(int i = 0; i < n; i++) { values.add(B[i]); } // Traverse all possible pairs of array for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { // If A[i] + A[j] is present in // the set if (values.contains(A[i] + A[j])) { // Remove A[i] + A[j] from the set values.remove(A[i] + A[j]); if (values.size() == 0) break; } } } // If set is empty if (values.size() == 0) return "Yes"; // Otherwise else return "No"; } // Driver Code public static void main(String args[]) { int N = 5; int A[] = { 3, 5, 1, 4, 2 }; int B[] = { 3, 4, 5, 6, 7 }; System.out.print(checkPossible(A, B, N)); } } // This code is contributed by offbeat
Python3
# Python3 program to implement # the above approach # Function to check if each element # of B[] can be formed by adding two # elements of array A[] def checkPossible(A, B, n): # Store each element of B[] values = set([]) for i in range (n): values.add(B[i]) # Traverse all possible # pairs of array for i in range (n): for j in range (n): # If A[i] + A[j] is present in # the set if ((A[i] + A[j]) in values): # Remove A[i] + A[j] from the set values.remove(A[i] + A[j]) if (len(values) == 0): break # If set is empty if (len(values) == 0): return "Yes" # Otherwise else: return "No" # Driver Code if __name__ == "__main__": N = 5 A = [3, 5, 1, 4, 2] B = [3, 4, 5, 6, 7] print (checkPossible(A, B, N)) # This code is contributed by Chitranayal
C#
// C# program to implement // the above approach using System; using System.Collections.Generic; class GFG{ // Function to check if each element // of []B can be formed by adding two // elements of array []A static String checkPossible(int []A, int []B, int n) { // Store each element of []B HashSet values = new HashSet(); for(int i = 0; i < n; i++) { values.Add(B[i]); } // Traverse all possible pairs of array for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { // If A[i] + A[j] is present in // the set if (values.Contains(A[i] + A[j])) { // Remove A[i] + A[j] from the set values.Remove(A[i] + A[j]); if (values.Count == 0) break; } } } // If set is empty if (values.Count == 0) return "Yes"; // Otherwise else return "No"; } // Driver Code public static void Main(String []args) { int N = 5; int []A = {3, 5, 1, 4, 2}; int []B = {3, 4, 5, 6, 7}; Console.Write(checkPossible(A, B, N)); } } // This code is contributed by Amit Katiyar
Javascript
<script> // Javascript program to implement // the above approach // Function to check if each element // of B[] can be formed by adding two // elements of array A[] function checkPossible(A, B, n) { // Store each element of B[] var values = new Set(); for(var i = 0; i < n; i++) { values.add(B[i]); } // Traverse all possible pairs of array for(var i = 0; i < n; i++) { for(var j = 0; j < n; j++) { // If A[i] + A[j] is present in // the set if (values.has(A[i] + A[j])) { // Remove A[i] + A[j] from the set values.delete(A[i] + A[j]); if (values.size == 0) break; } } } // If set is empty if (values.size == 0) return "Yes"; // Otherwise else return "No"; } // Driver Code var N = 5; var A = [ 3, 5, 1, 4, 2 ]; var B = [ 3, 4, 5, 6, 7 ]; document.write(checkPossible(A, B, N)); // This code is contributed by itsok </script>
Yes
Tiempo Complejidad: O(N 2 )
Espacio Auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por jrishabh99 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA