import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型一维数组
     */
    public int[] timesExceptSelf(int[] nums) {
        // write code here

        // 一些特殊情况的处理
        if (1 == nums.length) {
            return new int[]{};
        }

        int[] prefix = new int[nums.length]; // 定义一个整型数组,用于存放 除当前数外,其左边的所有数相乘的结果(前缀乘)
        int[] suffix = new int[nums.length]; // 定义一个整型数组,用于存放 除当前数外,其右边的所有数相乘的结果(后缀乘)
        int[] res = new int[nums.length]; // 定义一个整型变量,用于存放最终的返回结果。对于每个 res[i] 来说,res[i] = prefix[i] * suffix[i]

        // 别忘了进行初始化
        prefix[0] = 1;
        suffix[nums.length - 1] = 1;

        int total = nums[0];
        // 前缀乘
        for (int i = 1; i < nums.length; i++) {
            prefix[i] = total;
            total *= nums[i];
        }
        total = nums[nums.length - 1];
        // 后缀乘
        for (int i = nums.length - 2; i > -1; i--) {
            suffix[i] = total;
            total *= nums[i];
        }
        // 返回结果
        for (int i = 0; i < nums.length; i++) {
            res[i] = prefix[i] * suffix[i];
        }
        return res;
    }
}