剑指offer算法题

1 题目描述

给定一个数组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]。不能使用除法。

分析:

直接元素A[i]左右两侧各个元素的乘积left和right,它俩的乘积left x right就是最终的结果啊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int[] constructArr(int[] a) {
if(a.length==0)return a;
int[] lefts=new int[a.length];
int[] rights=new int[a.length];
lefts[0]=a[0];
rights[a.length-1]=a[a.length-1];
for(int i=1;i<a.length-1;i++){
lefts[i]=lefts[i-1]*a[i];
rights[a.length-1-i]=rights[a.length-i]*a[a.length-1-i];
}
int[] results=new int[a.length];
results[0]=rights[1];
results[a.length-1]=lefts[a.length-2];
for(int i=1;i<a.length-1;i++){
results[i]=lefts[i-1]*rights[i+1];
}
return results;
}
}

提交结果:

面试字节的时候没有想法,看了一下网上的解答思路,发现这么简单,哭晕在路上。


剑指offer算法题
https://leellun.github.io/2022/11/12/后端/java/算法结构/算法题/2022-11-12-剑指offer算法题/
作者
leellun
发布于
2022年11月12日
许可协议