求解5元素列表最小和与最大和时的代码错误排查
5元素列表最小和与最大和计算错误排查
问题背景
HackerRank习题要求:给定一个5元素列表,计算其最小和(去掉最大元素后4个元素的和)与最大和(去掉最小元素后4个元素的和)并输出。
测试情况:
- 列表
[1, 3, 5, 7, 9]:代码输出16和24,符合预期; - 列表
[1,2,3,4,5]:输出10和14,结果正确; - 列表
[7,69,2,221,8974]:预期结果为299和9271,但代码输出299和9266,出现错误。
我的代码
def miniMaxSum(arr): # Write your code here minSum = sum( arr[:-1]) maxSum = sum( arr[1:]) print(minSum,maxSum)
错误原因
代码逻辑存在问题:你默认用arr[:-1]取前4个元素的和作为最小和,arr[1:]取后4个元素的和作为最大和,但这只有在列表已经从小到大排序的情况下才成立。
以测试列表[7,69,2,221,8974]为例:
- 最小元素是2(索引2),最大元素是8974(索引4);
- 你的代码计算
maxSum时,去掉的是第一个元素7,而非最小元素2,导致求和结果为69+2+221+8974=9266,与正确结果9271不符。
修正方案
方案1:先排序再计算
通过排序确保前4个是最小的4个元素,后4个是最大的4个元素:
def miniMaxSum(arr): sorted_arr = sorted(arr) min_sum = sum(sorted_arr[:4]) max_sum = sum(sorted_arr[1:]) print(min_sum, max_sum)
方案2:利用总和计算(无需排序)
更高效的方式:计算列表总和,减去最大元素得到最小和,减去最小元素得到最大和:
def miniMaxSum(arr): total = sum(arr) min_sum = total - max(arr) max_sum = total - min(arr) print(min_sum, max_sum)
内容的提问来源于stack exchange,提问作者larry8989
相关产品推荐
相关产品推荐

