Dada una array de enteros, reemplace cada elemento con xor de los elementos anteriores y siguientes con las siguientes excepciones.
a) El primer elemento se reemplaza por la suma del primero y el segundo.
b) El último elemento se reemplaza por la suma del último y el penúltimo.
Ejemplos:
Input: arr[] = { 2, 3, 4, 5, 6} Output: 1 6 6 2 3 We get the following array as {2^3, 2^4, 3^5, 4^6, 5^6} Input: arr[] = { 1, 2, 1, 5} Output: 3, 0, 7, 4 We get the following array as {1^2, 1^1, 2^5, 1^5}
Una solución simple es crear una array auxiliar, copiar el contenido de la array dada a la array auxiliar. Finalmente, recorra la array auxiliar y actualice la array dada usando los valores copiados. La complejidad temporal de esta solución es O(n), pero requiere O(n) espacio adicional.
Una solución eficiente puede resolver el problema en O(n) tiempo y O(1) espacio. La idea es realizar un seguimiento del elemento anterior en bucle. Xor el elemento anterior usando la variable adicional y el siguiente elemento para obtener cada elemento.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to update every array element with // sum of previous and next numbers in array #include <iostream> using namespace std; void ReplaceElements(int arr[], int n) { // Nothing to do when array size is 1 if (n <= 1) return; // store current value of arr[0] and update it int prev = arr[0]; arr[0] = arr[0] ^ arr[1]; // Update rest of the array elements for (int i = 1; i < n - 1; i++) { // Store current value of next interaction int curr = arr[i]; // Update current value using previous value arr[i] = prev ^ arr[i + 1]; // Update previous value prev = curr; } // Update last array element separately arr[n - 1] = prev ^ arr[n - 1]; } // Driver program int main() { int arr[] = { 2, 3, 4, 5, 6 }; int n = sizeof(arr) / sizeof(arr[0]); ReplaceElements(arr, n); // Print the modified array for (int i = 0; i < n; i++) cout << arr[i] << " "; return 0; }
Java
// Java program to update every array // element with sum of previous and // next numbers in array import java .io.*; class GFG { static void ReplaceElements(int[] arr, int n) { // Nothing to do when array size is 1 if (n <= 1) return; // store current value of arr[0] // and update it int prev = arr[0]; arr[0] = arr[0] ^ arr[1]; // Update rest of the array elements for (int i = 1; i < n - 1; i++) { // Store current value of // next interaction int curr = arr[i]; // Update current value using // previous value arr[i] = prev ^ arr[i + 1]; // Update previous value prev = curr; } // Update last array element separately arr[n - 1] = prev ^ arr[n - 1]; } // Driver Code public static void main(String[] args) { int[] arr = { 2, 3, 4, 5, 6 }; int n = arr.length; ReplaceElements(arr, n); // Print the modified array for (int i = 0; i < n; i++) System.out.print(arr[i] + " "); } } // This code is contributed // by anuj_67..
Python3
# Python3 program to update every # array element with sum of previous # and next numbers in array def ReplaceElements(arr, n): # Nothing to do when array # size is 1 if n <= 1: return # store current value of arr[0] # and update it prev = arr[0] arr[0] = arr[0] ^ arr[1] # Update rest of the array elements for i in range(1, n - 1): # Store current value of # next interaction curr = arr[i] # Update current value using # previous value arr[i] = prev ^ arr[i + 1] # Update previous value prev = curr # Update last array element separately arr[n - 1] = prev ^ arr[n - 1] # Driver Code arr = [2, 3, 4, 5, 6] n = len(arr) ReplaceElements(arr, n) for i in range(n): print(arr[i], end = " ") # This code is contributed # by Shrikant13
C#
// C# program to update every array // element with sum of previous and // next numbers in array using System; class GFG { static void ReplaceElements(int[] arr, int n) { // Nothing to do when array size is 1 if (n <= 1) return; // store current value of arr[0] // and update it int prev = arr[0]; arr[0] = arr[0] ^ arr[1]; // Update rest of the array elements for (int i = 1; i < n - 1; i++) { // Store current value of // next interaction int curr = arr[i]; // Update current value using // previous value arr[i] = prev ^ arr[i + 1]; // Update previous value prev = curr; } // Update last array element separately arr[n - 1] = prev ^ arr[n - 1]; } // Driver Code public static void Main() { int[] arr = { 2, 3, 4, 5, 6 }; int n = arr.Length; ReplaceElements(arr, n); // Print the modified array for (int i = 0; i < n; i++) Console.Write(arr[i] + " "); } } // This code is contributed // by Akanskha Rai(Abby_akku)
PHP
<?php // PHP program to update every array // element with sum of previous and // next numbers in array function ReplaceElements(&$arr, $n) { // Nothing to do when array size is 1 if ($n <= 1) return; // store current value of arr[0] // and update it $prev = $arr[0]; $arr[0] = $arr[0] ^ $arr[1]; // Update rest of the array elements for ($i = 1; $i < $n - 1; $i++) { // Store current value of next // interaction $curr = $arr[$i]; // Update current value using // previous value $arr[$i] = $prev ^ $arr[$i + 1]; // Update previous value $prev = $curr; } // Update last array element separately $arr[$n - 1] = $prev ^ $arr[$n - 1]; } // Driver Code $arr = array( 2, 3, 4, 5, 6 ); $n = sizeof($arr); ReplaceElements($arr, $n); // Print the modified array for ($i = 0; $i < $n; $i++) echo $arr[$i] . " "; // This code is contributed by ita_c ?>
Javascript
<script> // Javascript program to update every array // element with sum of previous and next // numbers in array function ReplaceElements(arr, n) { // Nothing to do when array size is 1 if (n <= 1) return; // Store current value of arr[0] and update it let prev = arr[0]; arr[0] = arr[0] ^ arr[1]; // Update rest of the array elements for(let i = 1; i < n - 1; i++) { // Store current value of next interaction let curr = arr[i]; // Update current value using previous value arr[i] = prev ^ arr[i + 1]; // Update previous value prev = curr; } // Update last array element separately arr[n - 1] = prev ^ arr[n - 1]; } // Driver code let arr = [ 2, 3, 4, 5, 6 ]; let n = arr.length; ReplaceElements(arr, n); // Print the modified array for(let i = 0; i < n; i++) document.write(arr[i] + " "); // This code is contributed by subhammahato348 </script>
1 6 6 2 3
Publicación traducida automáticamente
Artículo escrito por imdhruvgupta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA