题目
描述
给定一个double类型的数组arr,其中的元素可正可负可0,返回连续子数组累乘的最大乘积。
数据范围:数组大小满足 0≤n≤10,数组中元素满足 ∣val∣≤10
进阶:空间复杂度 O(1) ,时间复杂度 O(n)
思路
分治思想,最小的有可能变最大的,当前状态也可能是最大的,所以维护三个状态,当前最大,当前状态,当前最小。
代码
python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param arr double浮点型一维数组
# @return double浮点型
#
class Solution:
def maxProduct(self , arr: List[float]) -> float:
# write code here
cur_min = arr[0]
cur_max = arr[0]
res = cur_max
lenght = len(arr)
for i in range(1, lenght):
cur = arr[i]
tmp_max = max([cur, cur_max*cur, cur_min*cur])
cur_min = min([cur, cur_min*cur, cur_max*cur])
cur_max = tmp_max
res = max(res, cur_max)
return res
c++版本:
无