Given an array of n integers where n > 1, nums,
return an array output such 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).
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.)
C++ 代码如下(涵盖测试代码):
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
if(nums.size() <= 0)
return nums;
int products = 1;
vector<int> zeroNum;
for(int i = 0; i < nums.size(); i++)
if(nums[i] != 0)
products *= nums[i];
else {
zeroNum.push_back(i);
}
//cout << "output" << endl;
vector<int> result(nums.size(), 0);
if(zeroNum.size() >= 2) {
return result;
}
if(zeroNum.size() == 1) {
result[zeroNum[0]] = products;
return result;
}
for(int i = 0; i < nums.size(); i++) {
result[i] = products/nums[i] ;
}
return result;
}
};
int main() {
vector<int> nums;
nums.push_back(0);
nums.push_back(2);
nums.push_back(0);
nums.push_back(4);
Solution s;
vector<int> r = s.productExceptSelf(nums);
for(int i = 0; i < r.size(); i++)
cout << r[i] << endl;
}注:提交两遍才过,第一遍忘记了考虑整个数组中有 0 的情况,加上判断,就通过了。
思路很简单,关键是细节。
不使用除法计算乘积
本文介绍了一种算法,可以在O(n)的时间复杂度内计算出数组中每个元素对应的除自身之外所有元素的乘积,并提供了一个C++实现示例。
400

被折叠的 条评论
为什么被折叠?



