给定数组data = [6, 3, 4, -8, 3, 7, 9],计算其连续子数组中乘积最大的值。
暴力解法res = -1e5
for lenth in range(1, len(data) + 1):
for b_index in range(0, len(data) - lenth + 1):
tmp = 1
for i in range(lenth):
tmp = tmp * data[b_index + i]
if tmp > res:
res = tmp
print(res)
动态规划
设:max_value为前t个数中以第t个数结尾的子数组的最大值
min_value为前t个数中以第t个数结尾的子数组的最小值
递归公式:
max_value(t+1)=max(data[t+1], data[t+1]*max_value(t), data[t+1]*min_value(t))
max_value(t+1)=min(data[t+1], data[t+1]*max_value(t), data[t+1]*min_value(t))
max_value = 1
min_value = 1
for i in range(len(data)):
tmp_max = max_value * data[i]
tmp_min = min_value * data[i]
max_value=max(data[i],tmp_max,tmp_min)
min_value=min(data[i],tmp_max,tmp_min)
print(max_value)



