剑指offer-JZ51-构建乘积数组

题目:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)

分析:连乘问题首先要考虑有没有0

首先计算A数组的长度,将B初始化为同size的数组(各元素均为0)

然后遍历A数组,找其中0元素的个数,并将其索引保存下来,若找到两个以上0元素,则B数组均为0;

若找到1个0元素,则B数组只有一个索引不为0,其他索引均为0;

若没有找到0元素,则使用土办法进行计算。

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 class Solution
 7 {
 8 public:
 9     vector<int> multiply(const vector<int>& A) 
10     {
11         int num = A.size();
12         vector<int> zero; 
13         vector<int> result;
14 
15         for (int i = 0; i < num; i++)
16         {
17             result.push_back(0);
18             if (A[i] == 0) zero.push_back(i);
19         }
20         if (zero.size() == 1)
21         {
22             //修改此值 result[zero[0]]
23             int temp = zero[0];
24             int sum = 1;
25             for (int i = 0; i < num; i++)
26             {
27                 if (i!=temp)
28                     sum *= A[i];
29                 else continue;
30             }
31             result[temp] = sum;         
32         }
33 
34         else if (zero.size() == 0)//修改所有result值
35         {
36             int j = 0;
37             while (j<num)
38             {
39                 int sum = 1;
40                 for (int i = 0; i < num; i++)
41                 {
42                     if (i != j)
43                     {        
44                         sum *= A[i];
45                     }
46                     else continue;
47                     result[j] = sum;
48                 }
49                 j += 1;
50                 
51             }
52         }    
53         return result;
54     }
55 };
56 
57 int main()
58 {
59     Solution sol;
60     vector<int> result;
61     vector<int> A{ 1, 2, 0, 4, 5 };
62     result = sol.multiply(A);
63 
64     for (int i = 0; i < A.size();i++)
65         cout << result[i] << endl;
66 
67     int u;
68     cin >> u;
69     return 0;
70 }

 

 

 

posted @ 2020-07-28 17:00  ZyLin-ux  阅读(113)  评论(0编辑  收藏  举报