题目描述

  给定一个数组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[i]=A[0]xA[]...xA[i-1]xA[i+1]...x A[n-1]看成A[0]xA[1]x...xA[i-1]和A[i+1]...xA[n -2]xA[n-1 ]两部分的乘积。因此,
数组B可以用一个矩阵来创建。在图中,B[i]为矩阵中第i行所有元素的乘积。

定义C[i]=A[0]xA[1]...xA[i-1], D[i]=A[i+1]x...xA[n-2]xA[n-1]。
C[i]可以用自上而下的顺序计算出来,即C[i]=C[i-1]xA[i-1]。类似的,D[i]
也可以用自下而上的顺序计算出来,即D[i]=D[i+1]xA[i+1].

测试用例

  1. 功能测试:输入数组包含正数、负数、一个0、多个0。
  2. 边界值测试:输入数组的长度为0。

Java代码

public class Offer066 {
public static void main(String[] args) {
test1();
test2();
test3(); } public static int[] multiply(int[] A) {
return Solution1(A);
} private static int[] Solution1(int[] A) {
if(A==null || A.length<2)
return null;
int[] B=new int[A.length];
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-2;i>=0;i--){
temp*=A[i+1];
B[i]*=temp;
}
return B;
} private static void test1() { } private static void test2() { }
private static void test3() { }
}

代码链接

剑指Offer代码-Java

最新文章

  1. UVA - 11584 Partitioning by Palindromes[序列DP]
  2. 使用Swift操作NSDate类型基础
  3. Python迁移MySQL数据到MongoDB脚本
  4. (C#基础) byte[] 之初始化, 赋值,转换。
  5. query specified join fetching, but the owner of the fetched association was not present in the select list
  6. apache开源项目--HydraBase
  7. @property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的
  8. Python3学习之二Django搭建
  9. MSSQL 常用内置函数
  10. 17 个 tar 命令实用示例【转】
  11. 排序算法入门之快速排序(java实现)
  12. 跨平台技术实践案例: 用 reactxp 重写墨刀的移动端
  13. POJ1192最优连通子串----树形dp
  14. zabbix添加IIS网站计数器(并发连接数)详解
  15. 2018-2019-2 20165315《网络对抗技术》Exp2 后门原理与实践
  16. js string和number
  17. 初识thinkphp(3)
  18. CentOS中vsftpd的主动和被动方式
  19. 第一篇markdown笔记
  20. Art of Android Develop. Activity的生命周期和启动模式。

热门文章

  1. Cobbler 自动安装CentOS7
  2. 安装CUDA9.0及对应版本的tensorflow-gpu详细过程(Windows server 2012R2版本也可以)
  3. GDOI#348大陆争霸[SDOI2010]最短路有限制条件
  4. 安装yarn实况
  5. coursera课程《how to learning 怎么学习》 总结
  6. 夯实Java基础(十七)——注解(Annotation)
  7. threejs 学习之
  8. 表结构查询 Sql
  9. Flutter学习笔记(21)--TextField文本框组件和Card卡片组件
  10. (四十二)c#Winform自定义控件-进度条扩展