调试Python函数:求数组中最大三个唯一元素的和
函数调试方案:获取最大唯一三元组和
原代码问题分析
原代码完全偏离需求,存在以下核心错误:
- 逻辑目标错误:计算的是连续三个元素的和,但需求是选取三个最大的唯一值相加,与元素位置无关
- 最大值更新逻辑错误:
if maxi > total: maxi += total判断条件颠倒,且累加操作不符合求最大值的逻辑 - 返回值错误:最后返回的是重置后的
total=0,而非计算出的最大值
修正后的实现
核心思路:先去重,再降序排序,取前三个最大的唯一值求和。
def getMaximumProfit(profit): # 去重并按降序排序 unique_profits = sorted(list(set(profit)), reverse=True) # 取前三个最大唯一值的和 return sum(unique_profits[:3])
测试验证
- 测试用例1:
profit = [2, 10, 33, 2, 5]
去重排序后为[33, 10, 5, 2],前三个和为33+10+5=48,符合预期 - 测试用例2:
profit = [2, 1, 33, -6, 5, 10, 10]
去重排序后为[33, 10, 5, 2, 1, -6],前三个和为33+10+5=48,符合预期
边界情况处理(可选)
如果存在去重后元素不足3个的场景,可添加判断逻辑:
def getMaximumProfit(profit): unique_profits = sorted(list(set(profit)), reverse=True) if len(unique_profits) < 3: # 此处可根据需求调整,比如返回所有元素的和或抛出异常 return sum(unique_profits) return sum(unique_profits[:3])
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

