每天一道算法题之除自身以外数组的乘积

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

题目描述:
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,
其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。1

示例:
输入: [1,2,3,4]
输出: [24,12,8,6]

两种求解方法:

方法1:一个数组存储当前索引左边的乘积,另一个数组存储当前索引右边的乘积,对应位置上的乘积就是返回值中对应位置上的结果.

方法2: 只利用一个数组进行存储结果; 在此基础上乘以后边数的乘积(此时只需一个变量存储右边数的乘积).

代码:
以方法2为例

public int[] productExceptSelf(int[] nums) {
    //通过一个数组记录左边乘积,另一个数组记录右边乘积
	//要弄清数组的含义,最好写出来,以免混淆
    int len = nums.length;
    
    int[] left = new int[len];
    left[0] = 1;//索引为0时最左边没有元素,为了保证后面的乘法可以继续进行,赋值为1.
    
    //更新left
    //更新左边部分乘积的和时,索引从左边开始
    for(int i = 1;i<len;i++){
        left[i] = left[i-1] * nums[i-1];  
    }
    
    //更新右边部分乘积时索引从右边开始
    int right = 1;
    for(int i = len-1;i>=0;i--){
        left[i] = left[i] * right;
        right = right * nums[i];  
    }

    return left;
}

  1. https://leetcode-cn.com/problems/product-of-array-except-self/ ↩︎

你可能感兴趣的:(每天一道算法题之除自身以外数组的乘积)