You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义规则的区间插入问题及代码bug修复求助

区间插入问题:拆分重叠/相邻区间

这个问题和LeetCode的《Insert Interval》题型类似,但需求有所区别:当插入区间与现有区间存在交集或相邻时,需要调整原有区间的边界,将插入区间占据的部分从原区间中分离出来。

具体示例:

  • 现有区间列表[[0, 3],[4, 4],[5, 5]],插入[3, 3],结果应为[[0, 2], [3, 3], [4, 4], [5,5]]
  • 现有区间列表[[0, 3],[4, 4],[5, 5]],插入[3, 4],结果应为[[0, 2], [3, 4], [5,5]]
  • 现有区间列表[[0, 3],[4, 8],[9, 10]],插入[5, 7],结果应为[[0, 3], [4, 4], [5, 7], [8, 8], [9, 10]]

注:插入区间始终位于0与当前区间列表的最后一个数值之间。

我写了一段Python代码,能通过测试用例1-5,但存在bug,无法覆盖所有场景,现寻求高效的解决方案。代码如下:

test_case_1_grouped = [[0, 3], [4, 4], [5, 5]]
test_case_1_cargo = [3, 4]
expected = [[0, 2], [3, 4], [5, 5]]

test_case_2_grouped = [[0, 3], [4, 4], [5, 5]]
test_case_2_cargo = [3, 3]
expected = [[0, 2], [3, 3], [4, 4], [5, 5]]

test_case_3_grouped = [[0, 3], [4, 8], [9, 10]]
test_case_3_cargo = [5, 7]
expected = [[0, 3], [4, 4], [5, 7], [8, 8], [9, 10]]

test_case_4_grouped = [[0, 3], [4, 8], [9, 10]]
test_case_4_cargo = [4, 7]
expected = [[0, 3], [4, 7], [8, 8], [9, 10]]

test_case_5_grouped = [[0, 3], [4, 8], [9, 10]]
test_case_5_cargo = [2, 9]
expected =[[0, 1], [2, 9], [10, 10]]

test_case_6_grouped = [[0, 3], [4, 8], [9, 10]]
test_case_6_cargo = [0, 10]
expected = [[0, 10]]

def insert(interval_list, interval_insert):
    inserted = False
    result = []
    first_number = interval_insert[0]
    second_number = interval_insert[1]
    flat_list = [item for sublist in interval_list for item in sublist]
    if first_number in flat_list:
        biggest_smaller_number_or_first_number = first_number
    else:
        f = filter(lambda x: x < first_number, flat_list)
        biggest_smaller_number_or_first_number = max(f)
    if second_number in flat_list:
        smallest_bigger_number_or_second_number = second_number
    else:
        f = filter(lambda x: x > second_number, flat_list)
        smallest_bigger_number_or_second_number = min(f)

    if first_number == biggest_smaller_number_or_first_number and smallest_bigger_number_or_second_number == second_number:
        for interval in interval_list:
            if first_number in interval:
                result.append([interval[0], first_number - 1])
                result.append(interval_insert)
                inserted = True
                continue

            if second_number in interval and interval == [second_number, second_number] and inserted:
                continue

            else:
                result.append(interval)

    elif first_number == biggest_smaller_number_or_first_number and smallest_bigger_number_or_second_number != second_number:
        for interval in interval_list:
            if first_number in interval:
                result.append(interval_insert)
                result.append([second_number + 1, smallest_bigger_number_or_second_number])
                continue
            else:
                result.append(interval)

    else:
        for interval in interval_list:
            if biggest_smaller_number_or_first_number in interval and smallest_bigger_number_or_second_number in interval:
                result.append([biggest_smaller_number_or_first_number, first_number - 1])
                result.append(interval_insert)
                result.append([second_number + 1, smallest_bigger_number_or_second_number])
                continue

            elif biggest_smaller_number_or_first_number in interval and smallest_bigger_number_or_second_number not in interval:
                result.append([biggest_smaller_number_or_first_number, first_number - 1])
                result.append(interval_insert)
                continue

            elif biggest_smaller_number_or_first_number not in interval and smallest_bigger_number_or_second_number in interval:
                result.append([smallest_bigger_number_or_second_number + 1, interval[1]])
                continue

            elif interval[0] > second_number or interval[1] < first_number:
                result.append(interval)

    return result

内容的提问来源于stack exchange,提问作者MichiganMagician

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:20:30