剑指offer——03二维数组中的查找

题目描述

给定一个数组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]。不能使用除法。
 
题解:
  将每一行分为两半部分,0,1,2....i-1    与   i+1.....n-1这两部分
  利用下图所示的矩阵,左半部分从上向下,利用上一行答案求解,右半部分从下至上求解,利用下一行答案求解。
  

  

 1 class Solution {
 2 public:
 3     vector<int> multiply(const vector<int>& A) {
 4         int size = A.size();
 5         if (size < 1)return{};
 6         vector<int>res(size);
 7         vector<int>C(size, 1), D(size, 1);
 8         for (int i = 1, j = size - 2; i < size && j >= 0; ++i, --j)
 9         {
10             C[i] = C[i - 1] * A[i - 1];
11             D[j] = D[j + 1] * A[j + 1];
12         }
13         for (int i = 0; i < size; ++i)
14             res[i] = C[i] * D[i];
15         return res;
16     }
17 };

 

 

posted @ 2019-10-21 16:39  自由之翼Az  阅读(85)  评论(0编辑  收藏  举报