原题如下:
https://leetcode-cn.com/problems/product-of-array-except-self/
2020年6月4日 每日一题
题解
方法一
此方法的思路为新建两个数组,长度都与nums相同,分别代表nums每一位左边所有数的乘积和右边数乘积,应相乘就是答案,这样的时间复杂度高于O(1),不是很符合条件
方法二
(基于官解)同样设置一个数组只表示某个数左边所有数的乘积,又设置一个变量初值为1,表示从nums数组最后一项开始右边所有数字的乘积,这样只花费了一个变量的空间,符合题目要求
本思路的java代码示例:
/*2020.06.04 每日一题 看完官解方法二后写出
*作者@v7fgg
*执行用时 :1 ms, 在所有 Java 提交中击败了100.00%的用户
*内存消耗 :48.1 MB, 在所有 Java 提交中击败了11.76%的用户
*2020年6月4日 7:25
*/
class Solution {
public int[] productExceptSelf(int[] nums) {
int[] zuo=new int[nums.length];
zuo[0]=1;
for(int i=1;i<nums.length;i++){
zuo[i]=zuo[i-1]*nums[i-1];
}
int you=1;
for(int j=nums.length-1;j>=0;j--){
zuo[j]*=you;
you*=nums[j];
}return zuo;
}
}