[剑指Offer]66-构建乘积数组
题目
给定一个数组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想象成用矩阵构建,B[i]为矩阵中第i行所有元素乘积,构建befI和afterI数组,B[i]=befI[i]*afterI[i]。
- 构建befI afterI数组分别自上而下和自下而上,时间复杂度O(n).
- 总体时间复杂度O(n).
代码
public class Main {
public static void main(String[] args) {
int[] A= {1,2,3,4,5};
int[] B=multiply(A);
for(int num:B) {
System.out.println(num);
}
}
public static int[] multiply(int[] A) {
int len=A.length;
int[] B=new int[len];
int[] befI=new int[len];
int[] afterI=new int[len];
befI[0]=1;
afterI[len-1]=1;
for(int i=1;i<len;++i) {
befI[i]=befI[i-1]*A[i-1];
}
for(int i=len-2;i>=0;--i) {
afterI[i]=afterI[i+1]*A[i+1];
}
for(int i=0;i<len;++i) {
B[i]=befI[i]*afterI[i];
}
return B;
}
}
[剑指Offer]66-构建乘积数组的更多相关文章
- 剑指offer 66. 构建乘积数组(Leetcode 238. Product of Array Except Self)
剑指offer 66. 构建乘积数组 题目: 给定一个数组A[0, 1, ..., n-1],请构建一个数组B[0, 1, ..., n-1],其中B中的元素B[i] = A[0] * A[1] * ...
- 剑指 Offer 66. 构建乘积数组 + 思维
剑指 Offer 66. 构建乘积数组 Offer_66 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarre ...
- 力扣 - 剑指 Offer 66. 构建乘积数组
题目 剑指 Offer 66. 构建乘积数组 思路1 按照一般的思路就是将所有的相乘,然后除以每一位数字就是答案,但是题目要求我们不能使用除法,因此我们会想到每次遍历到每个数字的时候,在遍历一遍数组, ...
- 【Java】 剑指offer(66) 构建乘积数组
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给定一个数组A[0, 1, …, n-1],请构建一个数组B[ ...
- 【剑指Offer】构建乘积数组 解题报告(Python)
[剑指Offer]构建乘积数组 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- Go语言实现:【剑指offer】构建乘积数组
该题目来源于牛客网<剑指offer>专题. 给定一个数组A[0,1,-,n-1],请构建一个数组B[0,1,-,n-1],其中B中的元素B[i]=A[0] * A[1] * - * A[i ...
- 剑指Offer 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].不 ...
- [剑指Offer] 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].不 ...
- 【剑指offer】构建乘积数组(注意优化空间)
给定一个数组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].不能使用除法 ...
- 【剑指offer】构建乘积数组
题目描述 给定一个数组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].不 ...
随机推荐
- 方便c号
sf+1 amrica 7133521154 6787834569 9209397021 good 3252404966 canda 9024002798 5484815680 3438037735
- centos 安装ifconfig
本文通过最简单方式yum
- PowerDesigner 使用笔记
1.将mysql数据结构导入到PowerDesigner https://blog.csdn.net/guochanof/article/details/81905616 2.设计数据库过程 http ...
- Linux操作命令和工具使用
lrzsz是一个unix通信套件提供的X,Y,和ZModem文件传输协议. windows 需要向centos服务器上传文件,可直接在centos上执行命令yum -y install lrzsz 程 ...
- @RequestBody和@RequestParam
@RequestBody的使用 https://blog.csdn.net/justry_deng/article/details/80972817 (@RequestBody Map map)接收多 ...
- IDEA2019.3激活
1 下载: 1.1 下载安装文件 https://blog.csdn.net/Beuty_Chen/article/details/103804886 1.2 下载激活补丁 链接 ...
- 【原创】Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...
- 单元测试与单元测试框架 Jest
什么是单元测试? 测试是一种验证我们的代码是否可以按预期工作的手段. 被测试的对象可以是我们程序的任何一个组成部分.大到一个分为多步骤的下单流程,小到代码中的一个函数. 单元测试特指被测试对象为程序中 ...
- RabbitMQ入门指南
消息队列(Message Queue,以下简称MQ)常用于异步系统的数据传递.若不用MQ,我们只能[在应用层]使用轮询或接口回调等方式处理,这在效率或耦合度上是难以让人满意的.当然我们也可以在系统间保 ...
- linux 下切换Python版本(某用户,共存,替换)
当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件.你可以按照以下方法使用 ls 命令来查看你的系 ...