美文网首页
前缀积、后缀积

前缀积、后缀积

作者: 编程不要键盘 | 来源:发表于2019-07-29 13:59 被阅读0次
    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
    
    示例:
    
    输入: [1,2,3,4]
    输出: [24,12,8,6]
    说明: 请不要使用除法,你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
    

    一开始想到用两个数组分别保存从左右两边乘过来的数字,其实可以优化成直接在res数组计算
    因为

      res[i] = 左边积 * 右边积
    

    代码如下:

    public int[] productExceptSelf(int[] nums) {
            int[] res = new int[nums.length];
            int k = 1;
            for(int i = 0; i < res.length; i++){
                res[i] = k;
                k = k * nums[i]; // 此时数组存储的是除去当前元素左边的元素乘积
            }
            k = 1;
            for(int i = res.length - 1; i >= 0; i--){
                res[i] *= k; // k为该数右边的乘积。
                k *= nums[i]; // 此时数组等于左边的 * 该数右边的。
            }
            return res;
        }
    

    相关文章

      网友评论

          本文标题:前缀积、后缀积

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