JZ51:构建乘积数组

构建乘积数组

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

方法1:遍历

思路:也就是B[i]=A[0]*A[1]...A[n] 其中不包括A[i];

//-------------复杂度为O(n^2)----------
    public int[] multily1(int[] A){
        if(A.length==0){
            return A;
        }
        int[] B=new int[A.length];
        int result=1;
        for(int i=0;i<A.length;i++){
            for(int j=0;j<A.length;j++){
                if(i==j){
                    continue;
                }
                result=result*A[j];
            }
            B[i]=result;
            result=1;
        }
        return B;
    }

方法2:二维矩阵

图片说明

       //-----------方法2:---------------------------
    public int[] nultiply2(int[] A){
        // 对A数组i项右侧自下往上累乘 时间复杂度O(n)
        // 将B拆分为A[0] *...* A[i-1]和A[n-1]*...*A[i+1] 两部分
        if(A.length==0){
            return A;
        }
        int[] B=new int[A.length];
        B[0]=1;
        //先计算左下三角形,此时B[0]只有一个元素,设为1
        for(int i=1;i<A.length;i++){
            B[i]=B[i-1]*A[i-1];
        }
        int temp=1;
        //计算右上三角形
        for(int i=A.length-1;i>=0;i--){
            B[i]=B[i]*temp;
            temp=temp*A[i];
        }
        return B;
    }
剑指Offer题解 文章被收录于专栏

剑指Offer-Java版本题解

全部评论

相关推荐

昨天 12:50
黑龙江大学 Java
点赞 评论 收藏
分享
沟头学院:无关比赛不要写,这样会显着你主次不分,比赛不要撒谎,有哪些就写那些,创新创业建议删除。技能特长可以适当夸大。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务