📌  相关文章
📜  用上一个和下一个之和替换每个数组元素

📅  最后修改于: 2022-05-13 01:57:05.432000             🧑  作者: Mango

用上一个和下一个之和替换每个数组元素

给定一个整数数组,用前一个和下一个元素的总和更新每个元素,但有以下例外。
a) 第一个元素被替换为第一个和第二个之和。
b) 最后一个元素被最后一个和倒数第二个的总和替换。
例子:

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

一个简单的解决方案是创建一个辅助数组,将给定数组的内容复制到辅助数组。最后遍历辅助数组并使用复制的值更新给定数组。该解决方案的时间复杂度为 O(n),但需要 O(n) 额外空间。
一个有效的解决方案可以在 O(n) 时间和 O(1) 空间内解决问题。这个想法是跟踪循环中的前一个元素。使用额外变量添加前一个元素和下一个元素以获取每个元素。
下面是这个想法的实现。

C++
// C++ program to update every array element with
// sum of previous and next numbers in array
#include 
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


Javascript


输出:
5 6 8 10 11

时间复杂度– O(N)