LeetCode238-除自身以外数组的乘积

题目链接

英文链接:https://leetcode.com/problems/product-of-array-except-self/

中文链接:https://leetcode-cn.com/problems/product-of-array-except-self/

题目详述

给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

示例:

1
2
输入: [1,2,3,4]
输出: [24,12,8,6]

说明:不要使用除法,且在 O(n) 时间复杂度内完成此题。

进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

题目详解

  • 新建一个数组 output 当作返回值,然后进行两次遍历。
  • 第一次遍历从左往右,将 output[i] 赋值为 i 左边的数的乘积。
  • 第一次遍历从右往左,将 output[i] 乘以上 i 右边的数的乘积。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class LeetCode_00238 {

public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] output = new int[len];
// output[i] 为 i 左边的数的乘积
int p = 1;
for (int i = 0; i < len; ++i) {
output[i] = p;
p *= nums[i];
}
// output[i] 乘以 i 右边的数的乘积
p = 1;
for (int i = len - 1; i >= 0; --i) {
output[i] *= p;
p *= nums[i];
}
return output;
}
}