【leetCode】Product of Array Except Self
2015-08-01 16:03
295 查看
题目:
Given an array of n integers
where n >
1,
return an array
that
equal to the product of all the elements of
Solve it without division and in O(n).
For example, given
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.)
中文翻译过来就是:
给一个数组/vector<int>,比如这里的(管他叫 nums吧) [1,2,3,4] ;然后输出一个数组output,输出数组的每一个元素的值,是原来nums中除这个位置以外所有元素的乘积。比如,output[0]
== 24;对应到nums就是 nums[1]*nums[2]*nums[3]的乘积。
但是!题目要求,不允许使用除法!!!换句话说,试图将nums中所有元素乘起来再分别除以每一个元素的值是不允许的;
自己之前写的超时了。看了别人的答案,觉得还是不够直观就再改了下,用空间换时间的办法写了个自己的解法。
思路如下:
首先,定义一个跟nums一样长度的vector a1,对nums”从左到右“遍历, a1中每一个位置 i 上的元素都是nums中位置 i 之前所有元素的乘积。当然,a1[0]因为左边没有元素,所以等于1;
其次。定义一个跟nums一样长度的vector a2,对nums”从右到左“遍历, a2中每一个位置 i 上的元素都是nums中位置
i 之后所有元素的乘积。当然,a2[nums.size()-1]因为右边没有元素,所以等于1;
示意图:
这样我们就有了每一个元素左边和右边的所有值的乘积,再把这两个值乘起来就可以啦。
翠花,上代码~
真是个令人沮丧的成绩...........
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
numsexcept
nums[i].
Solve it without division and in 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.)
中文翻译过来就是:
给一个数组/vector<int>,比如这里的(管他叫 nums吧) [1,2,3,4] ;然后输出一个数组output,输出数组的每一个元素的值,是原来nums中除这个位置以外所有元素的乘积。比如,output[0]
== 24;对应到nums就是 nums[1]*nums[2]*nums[3]的乘积。
但是!题目要求,不允许使用除法!!!换句话说,试图将nums中所有元素乘起来再分别除以每一个元素的值是不允许的;
自己之前写的超时了。看了别人的答案,觉得还是不够直观就再改了下,用空间换时间的办法写了个自己的解法。
思路如下:
首先,定义一个跟nums一样长度的vector a1,对nums”从左到右“遍历, a1中每一个位置 i 上的元素都是nums中位置 i 之前所有元素的乘积。当然,a1[0]因为左边没有元素,所以等于1;
其次。定义一个跟nums一样长度的vector a2,对nums”从右到左“遍历, a2中每一个位置 i 上的元素都是nums中位置
i 之后所有元素的乘积。当然,a2[nums.size()-1]因为右边没有元素,所以等于1;
示意图:
这样我们就有了每一个元素左边和右边的所有值的乘积,再把这两个值乘起来就可以啦。
翠花,上代码~
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { vector<int> a1(nums.size(),1);//存放每一个数左边所有数的乘积,0号元素直接 “1” vector<int> a2(nums.size(),1);//存放每一个数右边所有数的乘积,size()-1号元素直接“1” vector<int> r(nums.size(), 1);//结果 vector<int>::size_type length=nums.size(); for (decltype(length) i = 0; i < length; i++) { if (i == 0) a1[i] = 1; else a1[i] = a1[i - 1] * nums[i - 1]; } //cout << "a1 complete" << endl; //注意,这里的j不要定义为length的类型了。不然循环会报错的 for (int j = length - 1; j >= 0; j--) { //cout << "j==" << j << endl; if (j == length - 1) a2[j] = 1; else a2[j] = a2[j + 1] * nums[j + 1]; } //cout << "a2 complete" << endl; for (decltype(length) i = 0; i < length; i++) { r[i] = a1[i] * a2[i]; } return r; } };
真是个令人沮丧的成绩...........
相关文章推荐
- 直接插入排序
- 文本过滤之――grep,sort,wc,uniq,tr, 精准过滤IP地址,A类地址,B类地址.... 并排序
- squid 访问控制说明
- 关于Android二维码——1.生成二维码
- SPLIT划分算法
- C语言编程入门——switch、break与continue
- PHP---数据库
- ural 1019
- 递归的归并排序
- 【转】C++ 堆和栈的故事
- scp 远程复制到本地
- 树莓派的简单应用
- squid 安装简单说明
- 1-2 操作系统是什么?作用?
- import静态的类
- 【转】MySQL修改字段默认值_mysql数据库_三联
- 面试题42反转单词顺序VS左旋字符串(循环左移字符串)
- Bootstrap组件之面板
- Picasso安卓图片加载认知和持续更新(持续更新贴)
- uva5318 The Goddess Of The Moon dp+矩阵快速幂