LeetCode Q238 Product of Array Except Self(Medium)

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.)

翻译:

给定一个整型数组nums(元素数量大于1),返回一个数组output,其中output[i]等于nums中除nums[i]的所有元素的乘积。ps:你可以在不使用除法和其他辅助空间的情况下通过吗?(储存返回的结果的变量不算)

分析:

解法一:

  朴素算法,首先计算所有元素的积product,再算出output[i]=product/nums[i](注意product为0时或nums中只有一个0时要特殊处理),这样空间复杂度为O(1)。但这明显违反题目要求:不能用除法。

解法二:

  那么可以保存nums[i]左右两边的乘积,然后再相乘。假设nums左边0至i个元素相乘为left[i],右边i至nums.Length的乘积为right[i],output[i]=left[i-1]*right[i+1]。辅助空间为O(2n),仍然违反题目要求。

解法三:

  再观察一下解法二,其实right可以直接存在output中,然后再从遍历整个数组,当遍历到output[i]时(i>0),left*=nums[i-1],就这样不停地更新left。时间复杂度为O(n),空间复杂度为O(1)。

 1 public class Solution
 2 {
 3     public int[] ProductExceptSelf(int[] nums)
 4     {
 5         int[] output = new int[nums.Length];
 6         output[output.Length-1] = 1;
 7         for(int i=output.Length-2; i>=0; i--)
 8         {
 9             output[i] = output[i+1] * output[i+1];
10         }
11         int left = 1;
12         for(int i=0; i<nums.Length; i++)
13         {
14             output[i] *= left;
15             left *= nums[i];
16         }
17         return output;
18     }
19 }

  又一个完美的Accepted Solutions。

时间: 2024-10-25 09:24:08

LeetCode Q238 Product of Array Except Self(Medium)的相关文章

Leetcode 238. Product of Array Except Self

238. Product of Array Except Self Total Accepted: 51070           Total Submissions: 116543           Difficulty: Medium 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 ele

【LeetCode】Product of Array Except Self

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

(medium)LeetCode 238.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]. Fo

LeetCode 238. 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]. Fo

238. Product of Array Except Self [medium] (Python)

题目链接 https://leetcode.com/problems/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 divi

LeetCode 238 Product of Array Except Self(除自身外数组其余数的乘积)

翻译 给定一个有n个数字的数组nums,其中n大于1,返回一个数组使得output[i]等于除nums[i]外所有元素的乘积. 不用分治并且在O(n)复杂度下解决这个问题. 例如,给定[1, 2, 3, 4],返回[24, 12, 8, 6]. 跟进: 你可以只在常量空间下完成它吗? (备注:在空间复杂度计算时输出数组不作为额外空间.) 原文 Given an array of n integers where n > 1, nums, return an array output such t

leetcode 之 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

leetcode 238. Product of Array Except Self (Python版)

题目: 好长,大意是返回一个列表,列表中第i个元素为nums中出了i以外元素的乘积 注意不能用除法,时间复杂度为O(n) 空间复杂度为O(1) 解题思路: 利用返回的列表从前往后算一遍,再从后往前算一次即可 代码: class Solution(object):     def productExceptSelf(self, nums):         """         :type nums: List[int]         :rtype: List[int]  

Leetcode 238 Product of Array Except Self 递推

给出一个数组 nums[i](i = 0,1,...,n-1)  输出数组output[i]满足 output[i] = nums[0] * num[1] * num[2] *..*num[i-1] * num[i+1]*... *num[n-1] 要求不能使用除了output之外的大内存,满足时间复杂度O(n), 空间复杂度O(1). 分析下我们可以令dpf[i] = nums[0] * num[1] * num[2] *..*num[i-1] 而 dpb[i] =  num[i+1]*...