首先假定一个列表[lt1,lt2,lt3,...,ltm,...,ltn],则当前临时的最大乘积有以下三种情况。
第一,当ltm大于0时,如果[lt1,lt2,...,ltm-1]中最大的连续子序列乘积为正数,则当前临时的最大乘积为[lt1,lt2,...,ltm-1]中的最大连续子序列乘积再乘以ltm,反之则为ltm本身;
第二,当ltm小于0时,如果[lt1,lt2,...,ltm-1]中最小的连续子序列乘积为负数,则当前临时的最大乘积为[lt1,lt2,...,ltm-1]中的最小连续子序列乘积再乘以ltm,反之则为ltm本身;
第三,当ltm等于0时,则临时的最大乘积为0。
举例说明,假设有一个列表为[2,1,-2,3,4,6,0],假设当前ltm的值为列表中的元素6(大于0),且ltm之前的列表[2,1,-2,3,4]中的最大连续子序列(即[3,4])乘积为12,则当前临时的最大乘积为12*6等于72。
解析代码如下:
# 资源包\Code\chapter19\1933.py def maxMul(lt): if not lt: return # 设置初始值,保存[lt1,lt2,...,ltm-1]中最大连续子序列乘积 current_max = lt[0] # 设置初始值,保存[lt1,lt2,...,ltm-1]中最小连续子序列乘积 current_min = lt[0] # 设置初始值,保存当前序列的最大乘积 result = lt[0] for ltm in lt[1:]: # 计算当前临时的最大乘积 tmp_max = max(current_max * ltm, current_min * ltm, ltm) # 计算当前临时的最小乘积 tmp_min = min(current_max * ltm, current_min * ltm, ltm) current_max = tmp_max current_min = tmp_min result = max(result, current_max) return result # 输出结果为:72 lt = [2, 1, -2, 3, 4, 6, 0] print(maxMul(lt))
还没有评论,来说两句吧...