美文网首页
LeetCode 第238题: 除自身以外数组的乘积

LeetCode 第238题: 除自身以外数组的乘积

作者: 放开那个BUG | 来源:发表于2021-06-07 21:22 被阅读0次

1、前言

题目描述

2、思路

这道题的考察点我觉得不在于方法上,而在于智力上。首先,我们知道某个位置上 nums[i] 的乘积为:nums[0] * nums[1] * ... * nums[i - 1] * 1 * nums[i + 1] * ... * nums[n - 1]。我们数组中每个位置的上的乘积画出来:


由此看出,我们只要将乘积分为上三角、下三角,分别两次遍历即可。

3、代码

public class Q238_ProductExceptSelf {

    public int[] productExceptSelf(int[] nums) {
        if(nums == null || nums.length == 0){
            return new int[]{};
        }

        int p = 1, q = 1;
        int[] res = new int[nums.length];

        // 上三角的遍历
        for (int i = 0; i < nums.length; i++) {
            res[i] = p;
            p = p * nums[i];
        }

        for(int i = nums.length - 1; i >= 0; i--){
            res[i] = res[i] * q;
            q = q * nums[i];
        }


        return res;
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4};
        int[] res = new Q238_ProductExceptSelf().productExceptSelf(nums);
        for (int re : res) {
            System.out.println(re);
        }
    }
}

相关文章

网友评论

      本文标题:LeetCode 第238题: 除自身以外数组的乘积

      本文链接:https://www.haomeiwen.com/subject/yypwjltx.html