import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param milk_amount int整型一维数组
     * @return int整型一维数组
     */
    public int[] product_except_self (int[] milk_amount) {
        // write code here
        int n = milk_amount.length;
        int[] ans = new int[n];
        ans[0] = 1;
        for (int i = 1; i < n; i++) {
            ans[i] = milk_amount[i - 1] * ans[i - 1];
        }
        int R = 1;
        for (int j = n - 1; j >= 0; j--) {
            ans[j] *= R;
            R *= milk_amount[j];
        }
        return ans;
    }
}

编程语言是Java。

该题考察的知识点是数组操作和数学计算。

代码的文字解释如下:

  1. 初始化一个长度为n的整型数组ans用于保存结果,其中n为输入数组的长度。
  2. 遍历一次输入数组,计算当前元素左侧所有元素的乘积,并将结果保存到ans数组中。具体做法是,从索引1开始,将ans[i]的值设置为milk_amount[i-1]ans[i-1]的乘积。
  3. 定义一个变量R初始化为1,用于保存当前元素右侧所有元素的乘积。
  4. 从数组的右侧开始遍历,将每个位置j的元素值乘以R,并将结果保存到ans数组的相应位置j上。然后,更新变量RR乘以当前位置j的元素值milk_amount[j]
  5. 循环结束后,将ans数组作为结果返回。