输入:一个长度为n的整数数组input
输出:一个长度为n的整数数组result,满足result[i] = input数组中除了input[i]之外所有数的乘积(假设不会溢出)。比如输入:input={60,40,30,24}。
程序要求:具有线性复杂度,且不能使用除法运算符。
int *cal(int * input,int n)
思路:
left[i] 存储input[i]之前所有元素的乘积,right[i]存储input[i]之后所有元素的乘积,那么result[i]=left[i] *right[i]。
left[i] 的计算从左往右遍历元素一遍得出,right[i]的计算从右往左遍历元素一遍得出。时间复杂度为O(n),空间复杂度为O(n)。
#include <iostream>
using namespace std;
int *cal(int* input,int n) //时间复杂度为O(n),空间复杂度为O(n)
{
int i;
int *left = new int[n]; //存储input[i]之前所有元素的乘积
int *right = new int[n]; //存储input[i]之后所有元素的乘积
int *result = new int[n];
left[0]=1;
right[n