题解 | #构建乘积数组#

构建乘积数组

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

function multiply(array)
{
    // 构建两个数组,一个表示array从左到右累乘的结果,另一个表示array从右到左累乘的结果,
    // 两个累乘结果数组从起始位各自错开一位,起始位用 1 填充。

    // 举例来说,从左到右的结果数组中,第三个数字表示的是array中前两个数累乘的结果,
    //              第五个数字表示的是array中前四个数字累乘的结果,
    //         从右到左的结果数组中,倒数第三个数字表示的是array中后两个数累乘的结果,
    //              倒数第七个数字表示的是array中后六个数字累乘的结果。。。。。。

    // 这两个数组构建完成之后,构建一个新数组,它各个位置的值等于两个数组对应位置的值相乘,
    // 这样一来新数组中存储的就是array去除对应位置数字之后其他数字的累乘结果。

    // 举例来说,新数组共有八个数字,它的第三位是从左到右和从右到左两个数组中各自第三位的乘积,
    //      而这两个数字分别代表了array前两个数累乘以及array后五个数累乘,恰好没有包括第三个数。

    let LtoR = [array.length];
    let RtoL = [array.length];
    for (let i = 0; i < array.length; i++) {
        if (i === 0) {
           LtoR[i] = 1;
        } else {
            LtoR[i] = LtoR[i - 1] * array[i - 1];
        }
    }

    for (let i = array.length - 1 ; i >= 0 ; i--) {
        if (i === array.length - 1) {
            RtoL[i] = 1;
        } else {
            RtoL[i] = RtoL[i + 1] * array[i + 1];
        }
    }

    let result = [];
    for (let k = 0; k  < array.length; k++) {
        result[k] = RtoL[k] * LtoR[k];
    }

    return result;
}
JavaScript特供版
function multiply(array) {
    let LtoR = [];
    let RtoL = [];
    for (let i = 0; i < array.length; i++) {
        if (i === 0) {
            LtoR.push(1);
        } else {
            LtoR.push(LtoR[LtoR.length - 1] * array[i - 1]);
        }
    }

    for (let i = array.length - 1; i >= 0; i--) {
        if (i === array.length - 1) {
            RtoL.push(1);
        } else {
            RtoL.unshift(RtoL[0] * array[i + 1]);
        }
    }

    let result = [];
    for (let k = 0; k < array.length; k++) {
        result[k] = RtoL[k] * LtoR[k];
    }

    return result;
}


全部评论

相关推荐

找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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