剑指Offer面试题66:构建乘积数组

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:53   3166   0

这道题没思路,看了答案。

思路如下,以缺少的数组元素作为分界线,将数组分为两个小数组,其中,左方的数组,每经过一次乘积求值,他都会多乘一个元素,右方则相反,因此只需要创建两个数组,从顶向下,从底向上,求出值来,再将他们相乘即可。

    public int[] constructArr(int[] a) {
        
        int[] l = new int[a.length];
        int[] r = new int[a.length];
        if(a.length == 0){
            return l;
        }

        l[0] = 1;
        r[a.length-1] = 1;
        for(int count = 1;count<a.length;count++){
            l[count]=l[count-1]*a[count-1];
        }

        for(int count = a.length - 2;count>=0;count--){
            r[count]=r[count+1]*a[count+1];
        }

        int[] res = new int[a.length];
        for(int count = 0;count<a.length;count++){
            res[count]= l[count]*r[count];
        }

        return res;

    }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP