Careercup - Facebook面试题 - 5179916190482432
2014-05-01 01:00
375 查看
2014-05-01 00:45
题目链接
原题:
题目:给定一个整数数组,将个元素变为其他元素的乘积,例如[2, 3, 1, 4]变为[12, 8, 24, 6]。限制不准用除法,而且时间复杂度为线性级别。
解法:用一个额外的数组能够完成O(n)时间的算法。由于每个元素在变化之后,应该等于左边和右边的累计乘积,所以两边的累计乘积必须同时能够知道。一边可以用O(1)空间扫描得到,另一边只能用O(n)空间进行记录。时间空间复杂度均为O(n),请看代码。
代码:
题目链接
原题:
input [2,3,1,4] output [12,8,24,6] Multiply all fields except it's own position. Restrictions: 1. no use of division 2. complexity in O(n)
题目:给定一个整数数组,将个元素变为其他元素的乘积,例如[2, 3, 1, 4]变为[12, 8, 24, 6]。限制不准用除法,而且时间复杂度为线性级别。
解法:用一个额外的数组能够完成O(n)时间的算法。由于每个元素在变化之后,应该等于左边和右边的累计乘积,所以两边的累计乘积必须同时能够知道。一边可以用O(1)空间扫描得到,另一边只能用O(n)空间进行记录。时间空间复杂度均为O(n),请看代码。
代码:
// http://www.careercup.com/question?id=5179916190482432 #include <cstdio> #include <vector> using namespace std; void multiplyArray(vector<int> &v) { vector<int> vp; int p; int i; int n = (int)v.size(); vp.resize(n); p = 1; for (i = 0; i <= n - 1; ++i) { vp[i] = p; p *= v[i]; } p = 1; for (i = n - 1; i >= 0; --i) { vp[i] = p * vp[i]; p *= v[i]; } for (i = 0; i < n; ++i) { v[i] = vp[i]; } vp.clear(); } int main() { int i, n; vector<int> v; while (scanf("%d", &n) == 1 && n >= 0) { v.resize(n); for (i = 0; i < n; ++i) { scanf("%d", &v[i]); } multiplyArray(v); for (i = 0; i < n; ++i) { printf((i ? " %d" : "%d"), v[i]); } putchar('\n'); } return 0; }
相关文章推荐
- Careercup - Facebook面试题 - 5110993575215104
- Careercup - Facebook面试题 - 6321181669982208
- Careercup - Facebook面试题 - 4892713614835712
- Careercup - Facebook面试题 - 5998719358992384
- Careercup - Facebook面试题 - 5765850736885760
- Careercup - Facebook面试题 - 4713484755402752
- Careercup - Facebook面试题 - 5729456584916992
- Careercup - Facebook面试题 - 5344154741637120
- Careercup - Facebook面试题 - 5671785349513216
- Careercup - Facebook面试题 - 6026101998485504
- Careercup - Facebook面试题 - 4909367207919616
- Careercup - Facebook面试题 - 6685828805820416
- Careercup - Facebook面试题 - 5412018236424192
- Careercup - Facebook面试题 - 23594662
- Careercup - Facebook面试题 - 6139456847347712
- Careercup - Facebook面试题 - 23869663
- Careercup - Facebook面试题 - 4922014007558144
- Careercup - Facebook面试题 - 5761467236220928
- Careercup - Facebook面试题 - 5890898499993600
- Careercup - Facebook面试题 - 5188884744896512