Dada una array arr[] de enteros no negativos, definamos X como el XOR de todos los elementos de la array y S como la suma de todos los elementos de la array. La tarea es encontrar dos elementos tales que cuando se agreguen a la array S = 2 * X se cumpla para la array actualizada.
Ejemplos:
Entrada: arr[] = {1, 7}
Salida: 6 14
Inicialmente S = 8 y X = 6. Después de agregar 6
y 14, S_NEW = (8 + 6 + 14) = 28
y X_NEW = (6 ^ 6 ^ 14) = 14
Claramente, S_NEW = 2 * X_NEW
Entrada: arr[] = {1, 3}
Salida: 2 6
Enfoque ingenuo: ejecute dos bucles anidados de 1 a S y verifique para cada par si cumple la condición o no. Esto tomará tiempo O(S 2 ) .
Enfoque eficiente: se puede observar que si X y S + X se agregan a la array, entonces S_NEW = 2 * (S + X) y X_NEW = S + X que satisfacen la condición dada.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to find the required numbers void findNums(int arr[], int n) { // Find the sum and xor int S = 0, X = 0; for (int i = 0; i < n; i++) { S += arr[i]; X ^= arr[i]; } // Print the required elements cout << X << " " << (X + S); } // Driver code int main() { int arr[] = { 1, 7 }; int n = sizeof(arr) / sizeof(int); findNums(arr, n); return 0; }
Java
// Java implementation of the approach class GFG { // Function to find the required numbers static void findNums(int arr[], int n) { // Find the sum and xor int S = 0, X = 0; for (int i = 0; i < n; i++) { S += arr[i]; X ^= arr[i]; } // Print the required elements System.out.println(X + " " + (X + S)); } // Driver code public static void main (String[] args) { int arr[] = { 1, 7 }; int n = arr.length; findNums(arr, n); } } // This code is contributed by AnkitRai01
Python3
# Python3 implementation of the approach # Function to find the required numbers def findNums(arr, n) : # Find the sum and xor S = 0; X = 0; for i in range(n) : S += arr[i]; X ^= arr[i]; # Print the required elements print(X, X + S); # Driver code if __name__ == "__main__" : arr = [ 1, 7 ]; n = len(arr); findNums(arr, n); # This code is contributed by AnkiRai01
C#
// C# implementation of the approach using System; class GFG { // Function to find the required numbers static void findNums(int []arr, int n) { // Find the sum and xor int S = 0, X = 0; for (int i = 0; i < n; i++) { S += arr[i]; X ^= arr[i]; } // Print the required elements Console.WriteLine(X + " " + (X + S)); } // Driver code public static void Main() { int []arr = { 1, 7 }; int n = arr.Length; findNums(arr, n); } } // This code is contributed by AnkitRai01
Javascript
<script> // javascript implementation of the approach // Function to find the required numbers function findNums(arr , n) { // Find the sum and xor var S = 0, X = 0; for (i = 0; i < n; i++) { S += arr[i]; X ^= arr[i]; } // Print the required elements document.write(X + " " + (X + S)); } // Driver code var arr = [ 1, 7 ]; var n = arr.length; findNums(arr, n); // This code contributed by gauravrajput1 </script>
6 14
Complejidad de tiempo: O(n)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por AshaRamMeena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA