<LeetCode OJ> 238. Product of Array Except Self
2016-01-24 19:38
363 查看
238. Product of Array Except Self
My SubmissionsQuestion
Total Accepted: 31438 Total
Submissions: 77077 Difficulty: Medium
给定一个数组nums,且其长度大于1,返回一个数组output,此数组output[i]等于除掉nums[i]外所有元素的乘积
Given an array of n integers where n > 1,
nums,
return an array
outputsuch that
output[i]is
equal to the product of all the elements of
nums
except
nums[i].
Solve it without division and in O(n).不要用除法,性能要求为o(n),最好用常数空间解决问题。
For example, given
[1,2,3,4], return
[24,12,8,6].
Follow up:
Could you solve it with constant space complexity?
(Note: The output array does not count as extra space for the purpose of space complexity analysis.)
Subscribe to see which companies asked this question
Hide Tags
Array
Show Similar Problems
1,最朴素的做法:
求output[i]时,用两层循环,将除掉nums[i]外所有元素的相乘。当然,是无法AC的(写着玩)。class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { vector<int> result(nums.size(),1); for(int i=0;i<nums.size();i++) for(int j=0;j<nums.size();j++) if(j!=i) result[i]*=nums[j]; return result; } };
参考讨论区
2,技巧法:
百度了一下发现的普遍方法(尼玛大家尽然都想一块去了):具体过程是:要计算output[i],
就先计算,leftResult[i] = nums[0]*nums[1]*...*nums[i-1],
再计算,rightResult[i] = nums[i+1]*nums[i+2]*...*nums[n-1]
然后将这两个值相乘即为leftResult[i]*rightResult[i]=output[i]。
time,o(n),space,o(n)
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { vector<int> leftResult(nums.size(),1);//记录当前数nums[i]左边所有数的乘积,如果没有则是1 vector<int> rightResult(nums.size(),1); //记录当前数nums[i]右边所有数的乘积,如果没有则是1 for(int i=1;i<nums.size();i++) { leftResult[i]=leftResult[i-1]*nums[i-1]; rightResult[nums.size()-i-1]=rightResult[nums.size()-i]*nums[nums.size()-i]; } vector<int> result(nums.size()); for(int i=0;i<nums.size();i++) result[i]=leftResult[i]*rightResult[i]; return result; } };
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50574787
原作者博客:http://blog.csdn.net/ebowtang
相关文章推荐
- 【时间管理】调整我的时间轴
- 数据结构基础(四)树和二叉树
- 使用gcc和cmake编译工具编辑opencv例子
- 兔子出生总数问题
- IIemaGpmuJ.45
- thinkphp许愿墙后台
- Baby Ming and Weight lifting
- 创建动态的表格
- 爱因斯坦 上楼梯问题 若每步跨2阶,剩1阶 两种方法
- sgnirtSylpitluM.43
- Python爬虫入门(6):Cookie的使用
- hdu 1013 Digital Roots(简单题)
- Python爬虫入门(5):URLError异常处理
- Windwos下安装Hadoop
- C++学习笔记(三) 域运算符 new delete运算符 重载 name managling与extern"c" 带默认参数函数
- Python爬虫入门(4):Urllib库的高级用法
- 设置全局的.gitignore
- 自定义仪表盘PaneView
- android的命令行
- 如何写好竞品分析