【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[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].
测试用例
- 功能测试:输入数组包含正数、负数、一个0、多个0。
- 边界值测试:输入数组的长度为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】[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 题目 ...
- 《剑指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].不能使用 ...
- 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].不能使用除法 ...
随机推荐
- vue中使用vue-amap(高德地图)
因为项目要求调用高德地图,就按照官方文档按部就班的捣鼓,这一路上出了不少问题. 前言: vue-cli,node环境什么的自己安装设置推荐一个博客:https://blog.csdn.net/wula ...
- 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等
1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...
- 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...
- 【Java例题】1.4圆类
4.定义一个圆类,包括半径.构造方法.计算周长方法, 计算面积方法和显示半径方法. 然后编写一个主类,在其主方法中通过定义一个圆对象来 显示圆的半径.周长和面积. package study; imp ...
- HomeKit智能球泡
产品名称: 智能LED灯泡调光调色 接入苹果HomeKit家庭(无需网关).天猫精灵.小爱.小度.Google.ALEXA 产品价格:9.9 本产品是针对HomeKit的产品,没有iphone手机,配 ...
- python 闭包,装饰器,random,os,sys,shutil,shelve,ConfigParser,hashlib模块
闭包 def make_arerage(): l1 = [] def average(price): l1.append(price) total = sum(l1) return total/len ...
- python第三课--函数
函数的作用 编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题.例如3次求阶乘: m = int(input( ...
- vscode中配置git
vscode中配置git vscode 报错 未找到Git.请安装Git,或在"git.path" 设置中配置 第一步安装git git安装方法自行解决,提供git下载连接! gi ...
- c语言实现基本的数据结构(三) 栈
#include <stdio.h> #include <tchar.h> #include <stdlib.h> #define StackSize 5 #def ...
- 导入spark2.3.3源码至intellij idea
检查环境配置 maven环境 2.检查scala插件 没有的话可以到https://plugins.jetbrains.com/plugin/1347-scala/versions 下载与idea对应 ...