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

这道题考察的知识点主要包括:

  • 数组的遍历和操作
  • 前缀乘积和后缀乘积的计算
  • 下标的处理

代码的文字解释如下:

  1. 创建两个辅助数组lr,分别用于存储左侧乘积和右侧乘积。
  2. 初始化辅助数组lr的第一个元素为1,因为左侧没有元素或右侧没有元素时乘积都为1。
  3. 使用循环计算从前往后的左侧乘积。l[i]存储的是nums[i]左侧所有元素的乘积。
  4. 使用循环计算从后往前的右侧乘积。r[i]存储的是nums[i]右侧所有元素的乘积。
  5. 使用循环遍历原始数组nums,计算当前位置的乘积。根据要求,左侧乘积为l[Math.max(0, i - 1)],右侧乘积为r[Math.max(0, n - i - 2)]。将乘积结果存储在结果数组res中。
  6. 返回最终结果数组res
全部评论

相关推荐

求面试求offer啊啊啊啊:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务