Reemplace cada elemento de la array por la suma de anterior y siguiente

Dada una array de enteros, actualice cada elemento con la suma de los elementos anterior y siguiente 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 : 5 6 8 10 11
Explanation: We get the following array as {2+3, 2+4, 3+5, 4+6, 5+6}

Input : arr[] = { 3, 2, 1}
Output : 5 4 3

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. Agregue el elemento anterior usando la variable extra y el siguiente elemento para obtener cada elemento.
A continuación se muestra la implementación de esta idea. 
 

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 iteration
        int curr = arr[i];
 
        // Update current value using previews 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 iteration
            int curr = arr[i];
 
            // Update current value using previews 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
     
    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 akt_mit

Python 3

# Python 3 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 iteration
        curr = arr[i]
 
        # Update current value using
        # previews 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
if __name__ == "__main__":
 
    arr = [ 2, 3, 4, 5, 6 ]
    n = len(arr)
 
    ReplaceElements(arr, n)
 
    # Print the modified array
    for i in range(n):
        print (arr[i], end = " ")
 
# This code is contributed
# by ChitraNayal

C#

// C# program to update every array element with
// sum of previous and next numbers in array
using System;
public 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 iteration
            int curr = arr[i];
 
            // Update current value using previews 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
    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 Rajput-JI

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 iteration
        $curr = $arr[$i];
 
        // Update current value using
        // previews value
        $arr[$i] = $prev + $arr[$i + 1];
 
        // Update previous value
        $prev = $curr;
    }
 
    // Update last array element
    // separately
    $arr[$n - 1] = $prev + $arr[$n - 1];
    return $arr;
}
 
// Driver Code
$arr = array(2, 3, 4, 5, 6);
$n = sizeof($arr);
 
$arr1 = ReplaceElements($arr, $n);
 
// Print the modified array
for ($i = 0; $i < $n; $i++)
    echo $arr1[$i] . " ";
 
// This code is contributed
// by Akanksha Rai
?>

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 iteration
            let curr = arr[i];
   
            // Update current value using previews value
            arr[i] = prev + arr[i + 1];
   
            // Update previous value
            prev = curr;
        }
   
        // Update last array element separately
        arr[n - 1] = prev + arr[n - 1];
    }
     
    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] + " ");
    }
 
</script>
Producción: 

5 6 8 10 11

 

Complejidad del tiempo – O(N)
 

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 *