构建乘积数组

构建乘积数组

https://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46?tpId=13&&tqId=11204&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

假设:
left[i] = A[0]...*A[i-1]
right[i] = A[i+1]
...*A[n-1]
所以:
B[i] = left[i] * right[i]

所以我们可以先算出left[i],然后再算出right[i]

left[i] = left[i-1] X A[i-1]
right[i] = A[i+1] X right[i-1]
图片说明

public int[] multiply(int[] A) {
        int n = A.length;
        int[] B = new int[n];
        B[0] = 1;
        // 现在B[i] 相当于left[i]
        for(int i = 1; i < n; i++){
            B[i] = B[i-1]*A[i-1];
        }
        int tmp = 1;  // 最后一个刚开始是1
        //从倒数第二个算起
        for(int i = n-2; i >= 0; --i){
            // tmp相当于right[i]
            tmp *= A[i+1];
               //相当于 B[i] = left[i] * right[i]
            B[i] *= tmp;
        }
        return B;
    }

剑指offer 文章被收录于专栏

为刷过的每一道题都书写一篇题解,便于重复练习~

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务