Product of Array Except Self

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

Solve it without division and in O(n).

For example, given [1,2,3,4], return [24,12,8,6].

Follow up:
Could you solve it with constant space complexity? (Note: 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]。

进一步思考:

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

解题思路:

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

下面的解法非常巧妙,参考LeetCode Dicuss

链接地址:https://leetcode.com/discuss/46104/simple-java-solution-in-o-n-without-extra-space

由于output[i] = (x 0 * x 1 * ... * x i-1 ) * (x i+1 * .... * x n-1 )

因此执行两趟循环:

第一趟正向遍历数组,计算x 0 ~ x i-1 的乘积

第二趟反向遍历数组,计算x i+1 ~ x n-1 的乘积

class Solution:
  # @param {integer[]} nums
  # @return {integer[]}
  def productExceptSelf(self, nums):
    size = len(nums)
    output = [1] * size
    left = 1
    for x in range(size - 1):
      left *= nums[x]
      output[x + 1] *= left
    right = 1
    for x in range(size - 1, 0, -1):
      right *= nums[x]
      output[x - 1] *= right
    return output


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值