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 的情況,加上判斷,就通過了。
思路很簡單,關鍵是細節。