সংক্ষিপ্ত বিবরণ
একটি অ্যারে দেওয়া থাকলে, প্রতিটি ইন্ডেক্সের জন্য বাকি সব এলিমেন্টের গুণফল বের করতে হবে — ডিভিশন অপারেটর ছাড়া।
অ্যালগরিদম (O(n) টাইম, O(n) স্পেস)
- লেফট প্রডাক্ট অ্যারে: left[i] = arr[0]×...×arr[i-1]
- রাইট প্রডাক্ট অ্যারে: right[i] = arr[i+1]×...×arr[n-1]
- ফলাফল: prod[i] = left[i] × right[i]
উদাহরণ
Input: {10, 3, 5, 6, 2}
Output: {180, 600, 360, 300, 900}
সি কোড
#include <stdio.h>
#include <stdlib.h>
void productArray(int arr[], int n) {
int *left = malloc(n * sizeof(int));
int *right = malloc(n * sizeof(int));
int *prod = malloc(n * sizeof(int));
left[0] = 1;
for (int i = 1; i < n; i++) left[i] = arr[i-1] * left[i-1];
right[n-1] = 1;
for (int i = n-2; i >= 0; i--) right[i] = arr[i+1] * right[i+1];
for (int i = 0; i < n; i++) prod[i] = left[i] * right[i];
for (int i = 0; i < n; i++) printf("%d ", prod[i]);
printf("\n");
free(left); free(right); free(prod);
}
int main() {
int arr[] = {10, 3, 5, 6, 2};
int n = sizeof(arr)/sizeof(arr[0]);
productArray(arr, n);
return 0;
}
আউটপুট
180 600 360 300 900