最近在网上发现一道有趣的面试题,分别在腾讯和小米13年的面试中出现,题目不难但是特别有趣。
问题描述:
数组乘积
输入:一个长度为n的整数数组input
输出:一个长度为n的整数数组result,满足result[i] = input数组中除了input[i]之外所有数的乘积(假设不会溢出)。比如输入:input = {2,3,4,5},输出result = {60,40,30,24}
程序时间和空间复杂度越小越好。
对于这道题主要是空间复杂,一般需要申请一个变量缓存一个中间结果,但是又没有不需缓存的呢??当然问题较简单直接上代码
int *cal(int* input , int n)
{
int i ;
int *result = new int[n];
result[0] = 1;
for(i = 1 ; i < n ; ++i)
result[i] = result[i-1]*input[i-1];
result[0] = input[n-1];
for(i = n-2 ; i > 0 ; --i)
{
result[i] *= result[0];
result[0] *= input[i];
}
return result;
}
转载:http://blog.csdn.net/Hackbuteer1/article/details/8484974#comments