校驗區間是否存在重疊(Python)

linmao13037發表於2020-12-11

校驗區間(閉區間)是否存在重疊所用到得演算法參考:
無言火: 演算法–驗證時間段不交叉/不重複的方法
核心得思路在於:有序區間下,下一區間得開始節點必須大於上一區間得結束節點。
解決方案:首先根據區間開始節點排序整理好,然後迴圈判斷下一區間得開始節點是否大於上一區間的結束節點,如果小於等於則存在重疊。

Python示例如下:

# -*- coding: utf-8 -*-

def check_fun(check_list):
    """校驗是否重疊"""

    if len(check_list) < 1:
        return False
    if len(check_list) == 1:
        return True
    
    print('check_list : ', check_list)
    # 排序
    a_list = sorted(check_list, key=lambda l: l[0])

    print('a_list : ', a_list)

    for i in range(0, len(a_list)-1):
        if a_list[i+1][0] <= a_list[i][1]:
            print('%s 與 %s 重疊!'% (str(a_list[i]), str(a_list[i+1])))
            return False


# 定義三組樣例資料
a = [50, 150]
b = [1, 100]
c = [200, 1000]

check_list = [a,b,c]
res = check_fun(check_list)

相關文章