力扣238.除自身以外数组的乘积
文章目录
- 题目介绍
- 题解
- 优化
题目介绍
题解
代码如下:
class Solution {public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] pre = new int[n];pre[0] = 1; for (int i = 1; i < n; i++) {pre[i] = pre[i - 1] * nums[i - 1];}int[] suf = new int[n];suf[n - 1] = 1; for (int i = n - 2; i >= 0; i--) {suf[i] = suf[i + 1] * nums[i + 1];}int[] ans = new int[n];for (int i = 0; i < n; i++) {ans[i] = pre[i] * suf[i];}return ans;}
}
优化
先计算 suf,然后一边计算 pre,一边把 pre 直接乘到 suf[i] 中。最后返回 suf。
class Solution {public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] suf = new int[n];suf[n - 1] = 1;for (int i = n - 2; i >= 0; i--) {suf[i] = suf[i + 1] * nums[i + 1];}int pre = 1;for (int i = 0; i < n; i++) {// 此时 pre 为 nums[0] 到 nums[i-1] 的乘积,直接乘到 suf[i] 中suf[i] *= pre;pre *= nums[i];}return suf;}
}