Python,codewars,Sum of Intervals

# Sum of Intervals
# https://www.codewars.com/kata/52b7ed099cdc285c300001cd/train/python

def sum_of_intervals(intervals):
    intervals.sort(key = lambda x:x[0])
    result = 0
    previous = intervals[0]
    for l,r in intervals[1:]:
        if l <=previous[1]:
            previous = [previous[0],max(r,previous[1])]
        else:
            result += previous[1]-previous[0]
            previous = [l,r]
    return result + previous[1]-previous[0]


# best practice in codewars
def sum_of_intervals_2(intervals):
    s,top = 0,float('-inf')
    for a,b in sorted(intervals):
        if top<a: top = a
        if top<b: s,top = s+(b-top),b
    return s

# def sum_of_intervals(intervals):
#     distinct_intervals = [intervals[0]]
#     for l,r in intervals[1:]:
#         index = 0
#         is_merged = False
#         while index <len(distinct_intervals):
#             if l <=distinct_intervals[index][1] and r >= distinct_intervals[index][0]:
#                 is_merged = True
#                 distinct_intervals[index] = (min(l,distinct_intervals[index][0]),max(r,distinct_intervals[index][1]))
#                 break
#             elif r < distinct_intervals[index][0]:
#                 distinct_intervals.insert(index,(l,r))
#                 break
#             elif l > distinct_intervals[index][1]:
#                 if index == len(distinct_intervals)-1:
#                     distinct_intervals.append((l,r))
#                     break
#                 index+=1
#                 break
#         if is_merged:
#             end = index+1
#             # keep distinct_intervals[end][0] > r or end == len(distinct_intervals)
#             while end < len(distinct_intervals) and r >=distinct_intervals[end][0]:
#                 end+=1
#             distinct_intervals[index:end] = [(min(l,distinct_intervals[index][0]),max(r,distinct_intervals[end-1][1]))]
#             #被替换的部分不包括end
#             '''
#             a = [1,2,3,4,5,6,7,8,9]
#             a[2:5]=[0]
#             print(a)#[1, 2, 0, 6, 7, 8, 9]
#             '''
#     return sum([r-l for l,r in distinct_intervals],0)
#     #列表推导式,

# print(sum_of_intervals( 
#     [
#    [0, 20],
#    [-100000000, 10],
#    [30, 40]
# ] ))
posted @ 2025-03-07 20:33  Kazuma_124  阅读(8)  评论(0)    收藏  举报