链接:https://www.nowcoder.com/questionTerminal/94a4d381a68b47b7a8bed86f2975db46?answerType=1&f=discussion
来源:牛客网

题目描述

给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],
其中B中的元素B[i]=A[0] * A[1] * ... * A[i-1] * A[i+1] *... * A[n-1]。
不能使用除法。
(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)

背景:
B数组有n个值,每个值要进行一次连乘,因此正常连乘的话时间复杂度为O(n^2),效率非常低。考虑到计算每个B[i]时都会有重复,思考B[i]之间的联系,找出规律,提高效率。 PS:盗张图

思路:B[i]的左边和B[i-1]有关,右边和B[i+1]有关。

B[i]=A[0] * A[1]… * A[i-1]乘上A[i+1]…A[n-1] 以A[i]为分界线,将B分为左右两个部分相乘。

B[i]=左 * 右 利用一轮循环计算所有的左下三角,一轮循环计算所有的右上三角

当把A[0]…A[n-2]利用一轮for循环算出来时,左下角的所有乘积都知道了(得到了n-1个值),同理一轮for循环,右上角的A[1]…A[n-1]所有乘积都知道了(也得到了n-1个值),因此在第两轮for循环之时,进行对应的“组装”就可以得到对应的B[i]的值,相当于两轮循环下来,就可以完成所有计算。可以看到由于循环时分别得到n-1个值,因此n>1。因此需要加上判断条件

public class Solution {public int[] multiply(int[] A) {if(A==null || A.length<2)return null;int[] B=new int[A.length];B[0]=1;//这一轮循环下来,B数组中暂时存放了自己对应左下三角的乘积//即自己分成了左右两部分相乘后,左边部分的值此时拿到了for(int i=1;i<A.length;i++)B[i]=B[i-1]*A[i-1];int temp=1;for(int i=A.length-2;i>=0;i--){temp*=A[i+1];//temp =temp*A[i+1]; temp就是i位置对应的右边部分的值 从A[n-1]一直乘到A[1]B[i]*=temp;//B[i] =B[i]*temp; 左边部分乘上右边部分}return B;}
}

构建乘积数组 -- 牛客网(剑指offer)相关推荐

  1. Day5.牛客网剑指offer 67题之43-54题(java代码)

    文章目录 Day5.牛客网剑指offer 67题之43-54题 43.左旋转字符串 44.翻转单词顺序列 45.扑克牌顺序 46.孩子们的游戏 47.求1+2+...+n 48.不用加减乘除做加法 4 ...

  2. 牛客网剑指offer编程实践1-10题

    牛客网剑指offer编程实践1-10题 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这 ...

  3. Java算法:牛客网Java版剑指Offer全套算法面试题目整理及电子档,Java算法与数据结构面试题,面试刷题、背题必备!牛客网剑指offer

    剑指offer(java版) 牛客网Java版剑指Offer全套题目67道 资源来源于网络 目录 1.二维数组中的查找 2.替换空格 3.从尾到头打印链表 4.重建二叉树 5.用两个栈实现队列 6.旋 ...

  4. 牛客网剑指offer java 全部题解

    经过数月的努力,终于更完了牛客网的66道剑指offer,以下的顺序和大家在牛客网的顺序是一样的(排序也花了不少时间),希望对大家找工作/提高算法能力能起到些许帮助. 每天一道剑指offer-二维数组中 ...

  5. 《牛客网 剑指Offer前20题》

    <剑指Offer> 牛客网 前20道题 前言知识 面试题1:二维数组中的查找 面试题2:二维数组中的查找 面试题3:从头到尾打印链表 面试题4:重建二叉树 ***** 面试题5:两个栈实现 ...

  6. 牛客网剑指offer——Java题解

    剑指offer JZ1 二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这 ...

  7. 牛客网剑指offer(Python版)

    剑指offer官网:  https://www.nowcoder.com/ta/coding-interviews 写在前面的话 刷剑指offer的时候只需要提交函数核心部分,但是在公司实际笔试时却需 ...

  8. 牛客网剑指offer编程实践51-66题

    51. 构建乘积数组 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1].不 ...

  9. string类函数和牛客网剑指offer刷题记录

    1.strcat char* strcat(char *strDest,const char *strSrc){assert(strDest && strSrc);char *p = ...

最新文章

  1. 有关定时任务的表达式--cron 详细解
  2. 一起谈.NET技术,获取ISAPI_Rewrite重写后的URL
  3. android ViewPager滑动事件讲解
  4. python乒乓球比赛规则介绍_乒乓球比赛规则及活动方案
  5. 开启MySQL的sql语句记录
  6. springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA
  7. 深度学习与概率、统计的有趣探讨
  8. 03_TF2 Guide、文档清单(数据输入、估计器、保存模型、加速器、性能调优等)、TF2库和扩展库(TensorBoard、数据集、TensorFlow Hub、概率和统计分析库、图像处理库)
  9. 查询正在运行的ORACLE进程
  10. 神经网络中的 Dropout 以及变体方法
  11. 【Hadoop】安装Apache Hadoop
  12. POJ1029 UVA158 Calendar题解
  13. php代码上传工具,php中文网重磅推出“php程序员工具箱” v0.1版本!
  14. WebRTC音频处理流程简介
  15. P2627 [USACO11OPEN]Mowing the Lawn G 题解(单调队列+dp)
  16. 奖券数目2.1题目描述有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是N位数,要求其中不要出现带
  17. lunces_CES降温 汽车巨头回归底特律
  18. Vivado安装找不到matlab,vivado安装System Generator不支持新版Matlab怎么办?
  19. 蛟龙未遇,潜身于鱼虾之间;君子失时,拱手于小人之下。
  20. 初识DataBinding路上的坎

热门文章

  1. 洛谷 #2197. Nim游戏
  2. Springboot部署Nginx,配合Supervisor管理Springboot进程
  3. nodejs学习五:sequelize数据库查询的Op方法
  4. 如何通过3个月自学成为网络安全工程师!
  5. 真相为何竟如此难得 -- 《中国健康调查报告》
  6. 虞美人盛开的山坡片尾曲_さよならの夏_离别的夏天_歌词_带假名及翻译
  7. drf框架图片路径问题
  8. 【前端】【html5/css3】前端学习之路(二)(CSS3新选择器/CSS3盒模型/CSS3过渡效果)
  9. Linux运维精华面试题
  10. 基于C语言实现http下载器