剑指offer 51. 构建乘积数组

构建乘积数组

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

B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1],拆分一下
left = A[0]A[1]...A[i-1],right = A[i+1]...A[n-1],则B[i] = left * right
具体点可见下图(图取自牛客)
图片说明
蓝色部分为left,红色部分为right。1为边界条件(乘1相当于没乘)

JavaScript代码如下
注意,

  1. 循环里的两条语句,用来控制边界值1,不能颠倒顺序。若交换顺序,会多乘上一个array[i]
    比如B[3] = array[0]array[1]array[2]
    交换则成了B[3] = array[0]array[1]array[2]*array[3]
  2. 第一个for循环是= 。第二个for循环是 *=,用来求最终的B[i]
    function multiply(array)
    {
     let B = [];
     let temp = 1;
     for(let i=0; i < array.length; i++){
         B[i] = temp;
         //求左边的累乘
         temp *= array[i];
     }
     temp = 1;
     for(let j = array.length-1; j >= 0; j--){
         B[j] *= temp;
         //求右边的累乘
         temp *= array[j];
     }
     return B;
    }
全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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