77 - 乘积最大子序列
【摘要】 有一个整数类型的nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)
案例: data = [1, 2, -2, -1, 5, -4]
输出20,子序列: [-1, 5, 4]
'''
nums = [1, 2, -2, -1, 5, -4]
i = 3, j = 5
mul(i, j) = mul(0, j) / mul(0, i)
0: ...
有一个整数类型的nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)
案例:
data = [1, 2, -2, -1, 5, -4]
输出20,子序列: [-1, 5, 4]
'''
nums = [1, 2, -2, -1, 5, -4]
i = 3, j = 5
mul(i, j) = mul(0, j) / mul(0, i)
0: 需要重新开始
< 0: 应该找到前面最大的复负数
> 0; 最小的正数
'''
def maxMul(nums): if not nums: return # 目前的累乘 cur_mul = 1 # 前面最小的正数 min_pos = 1 # 前面最大的负数 max_neg = float('-inf') # 结果 result = float('-inf') for num in nums: cur_mul *= num if cur_mul > 0: result = max(result, cur_mul // min_pos) min_pos = min(min_pos, cur_mul) elif cur_mul < 0: if max_neg != float('-inf'): result = max(result, cur_mul // max_neg) else: result = max(result, num) max_neg = max(max_neg, cur_mul) else: cur_mul = 1 min_pos = 1 max_neg = float('-inf') result = max(result, num) return result
data = [1, 2, -2, 0, 5, -4]
data2 = [0, 0, 0]
print(maxMul(data))
print(maxMul(data2))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
5
0
- 1
- 2
文章来源: ruochen.blog.csdn.net,作者:若尘,版权归原作者所有,如需转载,请联系作者。
原文链接:ruochen.blog.csdn.net/article/details/104984450
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)