Given an array of integers, update every element with multiplication of previous and next elements with following exceptions.
a) First element is replaced by multiplication of first and second.
b) Last element is replaced by multiplication of last and second last.
Example:
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}
Source: Top 25 Interview Questions
A Simple Solution is to create an auxiliary array, copy contents of given array to auxiliary array. Finally traverse the auxiliary array and update given array using copied values. Time complexity of this solution is O(n), but it requires O(n) extra space.
An efficient solution can solve the problem in O(n) time and O(1) space. The idea is to keep track of previous element in loop.
Below is the implementation of this idea.
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 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
# 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#
// 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 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 ?> |
Output:
6 8 15 24 30
This article is contributed by Ravi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
Recommended Posts:
- Replace every array element by sum of previous and next
- Replace every array element by Bitwise Xor of previous and next element
- Replace every element of the array by its previous element
- Range Query on array whose each element is XOR of index value and previous element
- Replace each element by the difference of the total size of the array and frequency of that element
- Elements greater than the previous and next element in an Array
- Generate an array having Bitwise AND of the previous and the next element
- Rearrange an array such that every odd indexed element is greater than it previous
- Find the element whose multiplication with -1 makes array sum 0
- Replace duplicates with greater than previous duplicate value
- Maximum element in an array such that its previous and next element product is maximum
- Replace every element of the array by sum of all other elements
- Replace each element of Array with it's corresponding rank
- Replace every element of the array with BitWise XOR of all other
- Replace every element of the array by its next element
- Replace every element of array with sum of elements on its right side
- Replace every element of the array by product of all other elements
- Replace every element with the smallest of all other array elements
- Replace the maximum element in the array by coefficient of range
- Replace elements with absolute difference of smallest element on left and largest element on right

