美文网首页
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