Product of Array Except Self
来源:互联网 发布:java 实现 ping ip 编辑:程序博客网 时间:2024/05/21 10:37
题目:
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 ofnums
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.)
思路1(不合题目限制,但是AC):
考虑三种情况:(1)当所有元素均为非0数时... (2)当有一个元素为0时... (2)当有多于一个元素为0时...
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
ans = []
sum_all, numOfzero = 1,0
for v in nums:
if v!=0:
sum_all *= v
else:
numOfzero += 1
if numOfzero>1:
return [0 for i in range(len(nums))]
elif numOfzero==1:
for v in nums:
if v!=0:
ans.append(0)
else:
ans.append(sum_all)
else:
for v in nums:
ans.append(sum_all/v)
return ans
思路二:
我们可以申请一个等大的数组,第一个记录对应第一个元素的前面数字乘积,很显然是1(因为当前数字不算,而之前又没有数字,只能是1);往后递推,第二个记录对应除第二个元素之前的所有数字乘积,即需要刚才的1乘以刚才的第一个数字;形成数组left。从左往右遍历完成之后,left中对应数字的结果是所有左侧数字的乘积;那再从右往左便利一遍,再记录对应数字右侧所有数字的乘积,形成right。最终把两个数乘起来,不就得到想要的结果了吗。
另外,从右往左乘的过程,其实没有必要再申请一个新的数组了,只需要申请个别变量记录当前值,在刚才的数组上做即可。因为,当前值只跟上一个值有关。
通过一左一右两次扫描,就能够得到所求结果了。
class Solution(object):
def productExceptSelf(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
res = [0 for i in nums]
for i,v in enumerate(nums):
if i==0:
res[i] = 1
continue
res[i] = res[i-1]*nums[i-1]
j = len(res)-2
n = nums[j+1]
while j>=0:
res[j] = res[j]*n
j = j-1
n = n*nums[j+1]
return res
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- Product of Array Except Self
- 第五周第三天
- 更新表所有id的存储过程
- HDU-4762 Cut the Cake
- A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效(牛客网)
- Socks协议
- Product of Array Except Self
- Spark-1.4.0单机部署(Hadoop-2.6.0采用伪分布式)【已测】
- Linux下如何搭建WEB服务器教程(apach)
- Python多进程编程
- MYSQL 字符集 & 校验规则
- 【HDU1698】【线段树成段更新】
- android中Intent的用法总结
- 遗传算法
- Nginx配置及配置加载