• Leetcode题目238.除自身以外数组的乘积(中等)


    题目描述:

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

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

    说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。

    进阶:
    你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

    思路大概是用双指针标记每个位置的左积(left)和右积(right),这样在一次遍历中就可以计算出结果。
    eg:[1,2,3,4,5]
    2的左积在i=1时就算出,并且会更新此时的左积值。而其右积则在i=3时算出。

    思路分析:

    class Solution {
        public static 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--) {
                // k为该数右边的乘积。
                res[i] *= k;
                // 此时数组等于左边的 * 该数右边的。
                k *= nums[i];
            }
            return res;
        }
    }

    时间复杂度:O(n)

    空间复杂度:O(1)

  • 相关阅读:
    POJ 3667 & HDU 3308 & HDU 3397 线段树的区间合并
    HDU 5992 kd-tree
    BZOJ 4154 kd-tree dfs序 + 二维空间的区间(矩阵)更新单点查找
    BZOJ 4066 kd-tree 矩形询问求和
    BZOJ 1941 kd-tree
    BZOJ 2648 kd-tree模板
    HDU 5925 离散化
    php trait
    php命名空间
    js
  • 原文地址:https://www.cnblogs.com/ysw-go/p/11910406.html
Copyright © 2020-2023  润新知