数组 除自身以外数组的乘积(238)Java解法

在这里插入图片描述
思路

给定一个整数数组a,返回一个整数数组b
b中元素 对应a中 除了该元素 之外 其他元素的乘积
例如a =[1,2,3,4]
则 b=[2*3*4,1*3*4,1*2*4,1*2*3]
想办法 分别获取到 a中当前下标元素 左边元素的乘积 存入一个数组left 
							右边元素的乘积 存入一个数组right
需要注意的时 a[0] 左边没有元素 则a[0]左边元素的乘积 为1
a[3] 右边没有元素 则a[3]右边元素的乘积 为1
left = [1,1,1*2,1*2*3] right = [2*3*4,3*4,4,1]
结果数组res[i] = left[i]*right[i]

解法

class Solution {
    public int[] productExceptSelf(int[] nums) {
        //数组left,right 分别记录 当前元素 左边,右边元素 的乘积
        int[] left = new int[nums.length];
        int[] right = new int[nums.length];
        int[] res = new int[nums.length];
        //nums第0个元素 左边没有元素 所以左边元素的乘积为1
        //nums第3个元素 右边没有元素 所以右边元素的乘积为1
        int k = 1;
        for (int i = 0; i < nums.length; i++) {
            left[i] = k;
            //k每次拿到nums中当前下标的元素
            /**nums[4] = {2,4,6,8}
             * left[0] = 1 k = 1*2
             * left[1] = 2 k = 1*2*4
             * left[2] = 8 k= 1*2*4*6
             * left[3] = 48 k = 1*2*4*6*8
             */
            k *= nums[i];
        }
        k = 1;
        for (int i = nums.length - 1; i >= 0; i--) {
            right[i] = k;
             /**nums[4] = {2,4,6,8}
             * right[3] = 1 k = 1*8
             * right[2] = 8 k = 1*8*6
             * right[1] = 48 k= 1*8*6*4
             * right[0] = 192 k = 1*8*6*4*2
             */
            k *= nums[i];
        }
        for (int i = 0; i < nums.length; i++) {
            res[i] = left[i]*right[i];
        }
        return res;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值