The Problem
Given an array A[n] of n numbers. You have to modify A[n] such that A[i] will be equal to multiplication of all the elements of A[n] except A[i] e.g.
A[0] = A[1] * A[2] * ... * A[n-1] andYou have to solve the problem without using the division operator and in O(n). You cannot make use of another array
A[1] = A[0] * A[2] * ... * A[n-1]
C++ Program
#include <iostream> #define MAX 5 void print_array(int *arr) { for(int i = 0; i < 5; ++i) std::cout << arr[i] << " "; std::cout << std::endl; } int multiply_array(int *arr, int product_of_elems_before, int idx) { if(idx == MAX) { return 1; } int product_of_elems_after = multiply_array(arr, product_of_elems_before * arr[idx], idx + 1); int current = arr[idx]; //update array with the product arr[idx] = product_of_elems_before * product_of_elems_after; return product_of_elems_after * current; } int main() { int arr[5] = { 2, 3, 4, 1, 5}; multiply_array(arr, 1, 0); print_array(arr); }
Java Program
public class ArrayMultiplicationInPlace { public static void main(String args[]) { int[] arr = new int[]{ 3, 2, 1, 5, 4 }; multiplyArray(arr, 1, 0); printArray(arr); } private static int multiplyArray(int[] arr, int productOfElemsBefore, int idx) { if(idx == arr.length) { return 1; } int productOfElemsAfter = multiplyArray(arr, productOfElemsBefore * arr[idx], idx + 1); int current = arr[idx]; //update the array with the multiplication product arr[idx] = productOfElemsBefore * productOfElemsAfter; return productOfElemsAfter * current; } private static void printArray(int[] arr) { for(int i = 0; i < arr.length; ++i) System.out.print(arr[i] + " "); System.out.println(); } }
No comments :
Post a Comment