剑指offer-51-构建乘积数组 -- Java实现

题目

在这里插入图片描述

分析

思路一:

暴力,O(N^2)

代码:

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        int[] B = new int[A.length];
        if(A == null || A.length == 0) return null;
        for(int i = 0; i < A.length; i++) {
            int tmp = 1;
            for(int j = 0; j < A.length; j++) {
                if(j != i) {
                    tmp *= A[j];
                }
            }
            B[i] = tmp;
        }
        return B;
    }
}

思路二:

O(N)
在这里插入图片描述

代码:

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        if(A == null || A.length == 0) return null;
        int len = A.length;
        int[] B = new int[len];
        B[0] = 1;
        for(int i = 1; i <= len - 1; i++) {
            B[i] = B[i - 1] * A[i - 1];
        }
        int tmp = 1;
        for(int i = len - 2; i >= 0; i--) {
            tmp *= A[i + 1];
            B[i] *= tmp;
        }
        
        return B;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42054926/article/details/106135814