剑指offer 39.构建乘积数组

  1. 题目:给定一个数组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]。不能使用除法。
  2. 思路:
    1. 两个乘积数组,一个从前往后,一个从后往前
  3. 启发或者坑
    1. 注意边界,B的第一个元素和最后一个元素
    2. leetcode也有这个题目,238题号
    3. 我落入了index的坑,有一处index没写对,用leetcode来debug,解决了
  4. 代码
    class Solution {
    public:
        vector<int> multiply(const vector<int>& A) {
            vector<int> before;
            vector<int> after;
            vector<int> B;
            int res = 1;
            int afterRes = 1;
            for (int i = 0; i < A.size(); i++) {
                res = res*A[i];
                before.push_back(res);
                afterRes = afterRes *A[A.size()-1-i];
                after.push_back(afterRes);
            }
            B.push_back(after[A.size()-2]);
            for (int i = 1; i < A.size()-1; i++) {
                B.push_back(before[i-1]*after[A.size()-i-2]);
            }
            B.push_back(before[A.size()-2]);
            return B;
        }
    };
发布了131 篇原创文章 · 获赞 5 · 访问量 7387

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/103869354
今日推荐