企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 用上一个和下一个的乘法替换每个数组元素 > 原文: [https://www.geeksforgeeks.org/replace-every-array-element-by-multiplication-of-previous-and-next/](https://www.geeksforgeeks.org/replace-every-array-element-by-multiplication-of-previous-and-next/) 给定一个整数数组,请使用前一个和下一个元素的乘积更新每个元素,但以下例外。 a)第一个元素被替换为`first`和`second`。 b)将`last`元素替换为`last`和倒数第二乘积。 **示例**: ``` Input: arr[] = {2, 3, 4, 5, 6} Output: arr[] = {6, 8, 15, 24, 30} // We get the above output using following // arr[] = {2*3, 2*4, 3*5, 4*6, 5*6} ``` 资料来源:[前 25 个面试问题](https://www.geeksforgeeks.org/top-25-interview-questions/) 一个简单的解决方案是创建一个辅助数组,将给定数组的内容复制到辅助数组。 最后遍历辅助数组并使用复制的值更新给定的数组。 此解决方案的时间复杂度为`O(n)`,但需要`O(n)`额外空间。 一个有效的解决方案可以解决`O(n)`时间和`O(1)`空间中的问题。 这个想法是跟踪循环中的前一个元素。 以下是此想法的实现。 ## C ``` // C++ program to update every array element with // multiplication of previous and next numbers in array #include<iostream> using namespace std; void modify(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 interation         int curr = arr[i];         // Update current value using previos value         arr[i] = prev * arr[i+1];         // Update previous value         prev = curr;     }     // Update last array element     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]);     modify(arr, n);     for (int i=0; i<n; i++)       cout << arr[i] << " ";     return 0; } ``` ## Java ```java // Java program to update every array element with // multiplication of previous and next numbers in array import java.io.*; import java.util.*; import java.lang.Math; class Multipy {    static void modify(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 interation             int curr = arr[i];             // Update current value using previos value             arr[i] = prev * arr[i+1];             // Update previous value             prev = curr;         }         // Update last array element         arr[n-1] = prev * arr[n-1];     }     // Driver program to test above function     public static void main(String[] args)     {         int arr[] = {2, 3, 4, 5, 6};         int n = arr.length;         modify(arr, n);         for (int i=0; i<n; i++)          System.out.print(arr[i]+" ");     } } /* This code is contributed by Devesh Agrawal */ ``` ## Python3 ```py # Python program to update every array element with # multiplication of previous and next numbers in array def modify(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 interation         curr = arr[i];         # Update current value using previos value         arr[i] = prev * arr[i+1]            # Update previous value         prev = curr     # Update last array element     arr[n-1] = prev * arr[n-1] # Driver program arr = [2, 3, 4, 5, 6] n = len(arr) modify(arr, n) for i in range (0, n):     print(arr[i],end=" ") # This code is contributed by # Smitha Dinesh Semwal ``` ## C# ```cs // C# program to update every array  // element with multiplication of // previous and next numbers in array using System; class GFG  {     static void modify(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 interation             int curr = arr[i];             // Update current value using previos value             arr[i] = prev * arr[i+1];             // Update previous value             prev = curr;         }         // Update last array element         arr[n-1] = prev * arr[n-1];     }     // Driver program to test above function     public static void Main()     {         int []arr = {2, 3, 4, 5, 6};         int n = arr.Length;         modify(arr, n);         for (int i=0; i<n; i++)         Console.Write(arr[i]+" ");     } } // This code is contributed by Sam007 ``` ## PHP ```php <?php // PHP program to update every array  // element with multiplication of previous  // and next numbers in array function modify(&$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 interation         $curr = $arr[$i];         // Update current value using          // previos value         $arr[$i] = $prev * $arr[$i + 1];         // Update previous value         $prev = $curr;     }     // Update last array element     $arr[$n-1] = $prev * $arr[$n - 1]; } // Driver Code $arr = array (2, 3, 4, 5, 6); $n = sizeof($arr); modify($arr, $n); for ($i = 0; $i < $n; $i++) echo $arr[$i] ." "; // This code is contributed  // by ChitraNayal ?> ``` 输出: ``` 6 8 15 24 30 ```