题解 | #牛群重量积# java
牛群重量积
https://www.nowcoder.com/practice/d3c6930f140f4b7dbf3a53dd36742193
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型一维数组
*/
public int[] productExceptSelf (int[] nums) {
// write code here
int n = nums.length;
int[] res = new int[n];
int[] l = new int[n + 1];
int[] r = new int[n + 1];
l[0] = 1;
r[0] = 1;
for (int i = 1; i <= n; i++) {
l[i] = l[i - 1] * nums[i - 1];
}
for (int i = 1; i <= n; i++) {
r[i] = r[i - 1] * nums[n - i];
}
for (int i = 0; i < n; i++) {
int ans = l[Math.max(0, i - 1)] * r[Math.max(0, n - i - 2)];
res[i] = ans;
}
return res;
}
}
使用的是Java语言。
这道题考察的知识点主要包括:
- 数组的遍历和操作
- 前缀乘积和后缀乘积的计算
- 下标的处理
代码的文字解释如下:
- 创建两个辅助数组
l和r,分别用于存储左侧乘积和右侧乘积。 - 初始化辅助数组
l和r的第一个元素为1,因为左侧没有元素或右侧没有元素时乘积都为1。 - 使用循环计算从前往后的左侧乘积。
l[i]存储的是nums[i]左侧所有元素的乘积。 - 使用循环计算从后往前的右侧乘积。
r[i]存储的是nums[i]右侧所有元素的乘积。 - 使用循环遍历原始数组
nums,计算当前位置的乘积。根据要求,左侧乘积为l[Math.max(0, i - 1)],右侧乘积为r[Math.max(0, n - i - 2)]。将乘积结果存储在结果数组res中。 - 返回最终结果数组
res。

