Codewars区间求和问题:我的Python代码未通过部分测试用例,求排查
区间求和函数代码问题排查
我将以下sum_of_intervals函数提交到区间求和题目中,但部分测试用例未通过,无法定位问题,请求协助排查:
def sum_of_intervals(intervals): new_arr = [] ans = 0 re_arr=sorted(intervals) # Find overlapping arrays arr = re_arr.pop(0) for i in range(len(intervals)): if i == len(intervals)-1: # To append the last value into the new_array new_arr.append(arr) break for arrays in re_arr: if arr[1] >= arrays[0]: # Overlapping arrays arr=[min(arr[0],arrays[0]),max(arr[1],arrays[1])] re_arr[0] = arr else: # Not overlapping new_arr.append(arr) arr = re_arr.pop(0) # remove repetitive numbers final_arr = [] for i in new_arr: if i not in final_arr: final_arr.append(i) ans += i[1]-i[0] return final_arr,ans
问题分析
- 嵌套循环逻辑混乱:外层
for i in range(len(intervals))完全冗余,内层for arrays in re_arr会重复遍历剩余区间,导致合并逻辑出错。比如修改re_arr[0]后,内层循环仍会遍历后续元素,引发错误的合并或重复添加操作。 - 区间合并逻辑漏洞:当检测到重叠区间时,仅修改
re_arr[0]但未移除当前处理的arrays,会导致后续重复处理同一区间,无法完成完整的合并。 - 多余的去重步骤:排序并正确合并后的区间必然互不重叠且无重复,
if i not in final_arr的判断既低效又多余,还可能因逻辑错误导致的异常重复区间误判。 - 返回值不符合要求:题目要求返回区间的总长度,但当前函数返回的是
(final_arr, ans)元组,直接导致测试用例不通过。
修正后的代码示例
def sum_of_intervals(intervals): if not intervals: return 0 # 按区间左端点排序 sorted_intervals = sorted(intervals) merged = [sorted_intervals[0]] for current in sorted_intervals[1:]: last = merged[-1] # 检查是否重叠或相邻 if current[0] <= last[1]: # 合并区间:更新右端点为较大值 merged[-1] = (last[0], max(last[1], current[1])) else: merged.append(current) # 计算总长度 return sum(end - start for start, end in merged)
修正说明
- 移除冗余嵌套循环,通过一次遍历完成区间合并
- 正确处理合并逻辑:每次仅与最后一个已合并区间比较,重叠则更新右端点,不重叠则添加新区间
- 删除多余去重步骤,排序合并后无重复区间
- 返回值改为题目要求的区间总长度,而非元组
内容的提问来源于stack exchange,提问作者abraham amodu
相关产品推荐
相关产品推荐

