题解 | #牛群重量积# 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
。