Reemplace cada elemento de la array por Bitwise Xor del elemento anterior y siguiente

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>
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *