Leetcode 238. Product of Array Except Self

238. Product of Array Except Self                  

Total Accepted: 51070           Total Submissions: 116543           Difficulty: Medium        

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.)

思路:product存储的是所有不为0的数的积。注意有0、1、2个0的情况。

(1) 有0个0:v[i]=product/nums[i];

(2) 有1个0:nums[i]==0,v[i]=product;nums[i]!=0,v[i]=0;

(3) 有2个0:任意i,v[i]=0

代码:

 1 class Solution {
 2 public:
 3     vector<int> productExceptSelf(vector<int>& nums) {
 4         long long product=1;
 5         int i,num=0,pos=-1;
 6         for(i=0;i<nums.size();i++){
 7             if(nums[i]==0){
 8                num++;
 9                pos=i;
10                continue;
11             }
12             product=product*nums[i];
13         }
14         vector<int> v(nums.size(),0);
15         if(num==1){
16             v[pos]=product;
17         }
18         if(num==0){
19             for(i=0;i<nums.size();i++){
20                 v[i]=product/nums[i];
21             }
22         }
23         return v;
24     }
25 };
原文地址:https://www.cnblogs.com/Deribs4/p/5634190.html