数字的积

来源:互联网 发布:lol还能火多久 知乎 编辑:程序博客网 时间:2024/05/02 21:21

输入一个长度为n的整数数组a[n],输出为长度为n的整数数组output[n],要求output[i]的值为除了a[i]之外其它所有数组a内元素的乘积。不能用除法,并且时间复杂度要求为O(n)。例如输入{4, 3, 2, 1, 2},输出{12, 16, 24, 48, 24}。

方法一:

void fun(int a[], int output[], int n){int *buf = new int[n];buf[0] = 1;for (int i = 1; i < n; i++){buf[i] = buf[i-1] * a[i-1];}    int right = 1;for (int i = n-1; i >= 0; i--){        output[i] = buf[i] * right;right *= a[i];}delete []buf;}

方法二:(不需要额外空间)

void fun(int a[], int output[], int n){for (int i = 0; i < n; i++){output[i] = 1;}int left = 1;int right = 1;for (int i = 0; i < n; i++){        output[i] *= left;output[n-1-i] *= right;left *= a[i];right *= a[n-1-i];}}


原创粉丝点击