除自身以外数组的乘积
  这个题目关键在于计算两个方向的乘积,最简单方法就是创建两个数组存放L与R方向成积,但是会额外增加计算量,因为有些是不需要计算乘积(根据输出迭代判断),此时我们应该想的就是在输出时我们又进行了迭代,那么我们可以利用这个迭代,进行输出的同时另外去构建R方向的乘积,这样就可以通过条件判断减少运行时间,虽然没有减少时间复杂度。我就想到这个,但是没有想到将空间复杂度变为1,看了官方题解,我发现我竟然忘了可以将L方向乘积用输出数组替代,这真的是我的问题了,观察不仔细了。这里我没有优化空间,用的还是我的算法,具体可以看官方题解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public int[] productExceptSelf(int[] nums) {
int m = nums.length;
int [] num = new int[m];
// int [] n = new int[m];
int [] ms = new int[m];
for(int i =0; i< m;i++){
if(i !=0){
ms[i] = nums[i]*ms[i-1];
// n[m-1-i] = nums[m-1-i]*n[m-1-i+1];
}else{
ms[i] = nums[i];
// n[m-1-i] = nums[m-1-i];
}
}
for(int i = m-1;i>=0;i--){
if(i==m-1){
num[i] = ms[i-1];
}else if(i==0){
num[i] = nums[i+1];
}else{
nums[i] = nums[i]*nums[i+1];
num[i] = ms[i-1]*nums[i+1];
}

}
return num;
}
}