题解 | #构建乘积数组#

构建乘积数组

https://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param A int整型一维数组
     * @return int整型一维数组
     */
    public int[] multiply (int[] A) {
        // write code here
        int[] mul1 = new int[A.length];
        int[] mul2 = new int[A.length];
        int mul = 1;
        //记录A[0]~A[i-1]的乘积值
        for (int i = 0; i < A.length; i++) {
            mul1[i] = mul;
            mul *= A[i];
        }
        mul = 1;
        //记录A[i+1]~A[n-1]的乘积值
        for (int i = A.length - 1; i >= 0; i--) {
            mul2[i] = mul;
            mul *= A[i];
        }
        int[] ret = new int[A.length];
        //于是ret[i]登录mul1[i]*mul2[i]
        for (int i = 0; i < A.length; i++) {
            ret[i] = mul1[i] * mul2[i];
        }
        return ret;
    }
}

一个比暴力求解好一点的方法,时间复杂度为O(n)

额外用两个数组mul1和mul2,分别记录从A[0] ~ A[i-1]和A[i+1] ~ A[n-1]的乘积值,时间复杂度为O(n)

然后B数组可以用mul1[i]*mul2[2]的方式计算,时间复杂度为O(n)

所以最终的时间复杂度为O(n)

#剑指offer#
全部评论

相关推荐

02-14 12:40
门头沟学院 Java
程序员花海:1.面试要求必须Java笔试不一定 2.难度对等秋招 远超于日常实习是因为同一批次且转正很多 竞争压力大 3.第一个加点指标,上线了就把接口性能加上去 使用本地缓存这个不算亮点 只是技术选型,要把为什么采用这个和背后的思考写出来而不是单纯堆叠技术没意义 4.八股要一直看 很容易忘记 5.拼团交易这个老问题 堆积技术 另外建议你把奖项合并到教育背景 没必要拆出来放最后
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务