LeetCode——Product of Array Except Self
2015-10-28 10:39
239 查看
本题要求是不使用额外空间,但保存输出结果的空间是必须要有的,此空间不计入空间复杂度,因而我们可以利用这部分空间存储中间结果。
先看代码:
总结来说就是先迭代计算并保存第i个元素之前的所有元素之乘积,再实时迭代得到第i个元素之后所有元素之乘积,相乘即得output[i]。
先看代码:
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]。
相关文章推荐
- versions使用心得
- 处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题
- POJ 2377
- 【足迹C++primer】49、超载,更改,运营商
- 判断输入的是否是大于0的正整数
- Linux下Wireshark的网络抓包使用方法
- C++【类与访控属性】
- 电源中磁珠作用分析
- Hive参数配置以及HQL编写技巧
- JAVA中的final关键字
- java的System.getProperty()方法可以获取的值
- 贪心
- Unity:镜面反射
- 关于支付的几点注意
- mysql输出的错误提示是法语
- matlab程序移植到C(输出比较)
- 输出1000-2000是闰年的年份
- TBS调试手机QQ浏览器
- 【Qt多线程之信号量】Qsemaphore
- 第七讲流程图