zoukankan      html  css  js  c++  java
  • [leetcode] 238. Product of Array Except Self

    题目大意

    https://leetcode.com/problems/product-of-array-except-self/description/

    238. Product of Array Except Self

    Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].

    Example:

    Input:  [1,2,3,4]
    Output: [24,12,8,6]

    Note: Please solve it without division and in O(n).

    Follow up:
    Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.)

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

    不使用除法,在O(n)时间复杂度内完成此题目。

    例如,给定 [1,2,3,4],返回 [24,12,8,6]。

    进一步思考:

    你可以在常数空间复杂度内完成题目吗?(注意:输出数组不算在空间复杂度分析中)

    解题思路

    思路1:除法

    计算全部数字的乘积,然后分别除以num数组中的每一个数(需要排除数字0)。然而,题目要求不能使用除法。

    思路2:计算每个元素的前后元素累计乘积

    对数组中的每一个数,计算其前面元素及其后面元素的乘积。然而,时间复杂度O(n^2),超出时间限制。

    class Solution(object):
        def productExceptSelf(self, nums):  #  Time Limit Exceeded
            return [self.product(nums[:i] + nums[i+1:]) for i in range(len(nums))]
    
        def product(self, arr):
            res = 1
            for n in arr:
                res *= n
            return res

    思路3:正反遍历数组

    由于res[i] = (x0 * x1 * ... * xi-1) * (xi+1 * .... * xn-1),因此执行两趟循环:

    • 第一趟正向遍历数组,计算x0 ~ xi-1的乘积
    • 第二趟反向遍历数组,计算xi+1 ~ xn-1的乘积

    时间复杂度O(n),空间复杂度O(1)

    class Solution(object):
        def productExceptSelf(self, nums):
            """
            :type nums: List[int]
            :rtype: List[int]
            """
            size = len(nums)
            res = [1] * size
            left = 1
            for i in range(size):  # forword
                res[i] *= left
                left *= nums[i]
            right = 1
            for i in range(size-1, -1, -1):  # backword
                res[i] *= right
                right *= nums[i]
            return res

    参考:

    https://leetcode.com/problems/product-of-array-except-self/discuss/65625/Python-solution-(Accepted)-O(n)-time-O(1)-space

    http://bookshadow.com/weblog/2015/07/16/leetcode-product-array-except-self/

  • 相关阅读:
    stark
    MySQL与JDBC
    存储过程/视图/触发器
    MyCat部署运行(Windows环境)与使用步骤详解
    常用单词总结
    表单校验---validation检验
    jQuery简介
    javascript简单介绍
    HTML&&CSS
    消息队列Java的简单实现
  • 原文地址:https://www.cnblogs.com/bymo/p/9596963.html
Copyright © 2011-2022 走看看