16.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。

请不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例1:

输入: nums = [1,2,3,4]
输出: [24,12,8,6]

示例2:

输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

提示:

  • 2 <= nums.length <= 105
  • -30 <= nums[i] <= 30
  • 输入 保证 数组 answer[i] 在 32 位 整数范围内

代码:

class Solution {
    public int[] productExceptSelf(int[] nums) {
        //数组长度
        int len = nums.length;
        //左前缀积数组,left[i]表示nums前i个元素的积
        int[] left = new int[len];
        //右前缀积数组,right[i]表示nums[i]到nums[len-1]的元素的积
        int[] right = new int[len];
        //结果数组
        int[] res = new int[len];
        //初始化left[0]、right[len-1]
        left[0] = nums[0];
        right[len-1] = nums[len-1];
        //left[i] = left[i-1]*nums[i]
        for(int i=1;i<len;i++)left[i] = left[i-1]*nums[i]; 
        //right[i] = right[i+1]*nums[i]
        for(int i=len-2;i>=0;i--)right[i] = right[i+1]*nums[i];
        //计算结果
        for(int i=0;i<len;i++){
            if(i==0)res[i] = right[i+1];
            else if(i==len-1)res[i] = left[i-1];
            else res[i] = left[i-1]*right[i+1];
        }
        return res;
    }
}
posted @ 2025-04-16 10:51  回忆、少年  阅读(5)  评论(0)    收藏  举报