您的位置:首页 > 其它

LeetCode——Product of Array Except Self

2015-10-28 10:39 239 查看
本题要求是不使用额外空间,但保存输出结果的空间是必须要有的,此空间不计入空间复杂度,因而我们可以利用这部分空间存储中间结果。

先看代码:

class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {

vector<int> output;

int current = 1;
output.push_back(1);

for(int i = 1; i < nums.size(); ++i)
{
current *= nums[i-1];
output.push_back(current);
}

current = 1;

for(int i = nums.size()-1; i >= 0; --i)
{
output[i] *= current;
current *= nums[i];
}

return output;
}
};
具体过程是:要计算output[i],就先计算nums[0]*nums[1]*...*nums[i-1],再计算nums[i+1]*nums[i+2]*...*nums[n-1](n为nums.size()-1),然后将这两个值相乘即为output[i]。前者可以用迭代的方法计算并保存在output数组里,output[0]的值为1(在乘法里,设1为初值就可以不影响之后的计算结果,1乘以任何值结果就是这个值本身,和加法的初值设为0是一样的),output[i]的值为nums[0]*nums[1]*...*nums[i-1],也就是这个元素之前的所有元素之乘积。后者用一个current变量保存就足够了,因为每次计算完后前一个值就不需要了,计算最终结果output[i]时,current的值为1*nums[n-1]*nums[n-2]*...*nums[i+1],与之前保存的中间值output[i]相乘即得最终结果。计算完output[i]后,再更新current的值。

总结来说就是先迭代计算并保存第i个元素之前的所有元素之乘积,再实时迭代得到第i个元素之后所有元素之乘积,相乘即得output[i]。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: