정렬되고 분리된 간격 목록과 간격을 나타내는 또 다른 목록 절단이 있다고 가정합니다. 컷 간격과 교차하는 간격의 모든 부분을 삭제하고 새 목록을 반환해야 합니다.
따라서 입력이 간격 =[[2, 11],[13, 31],[41, 61]] cut =[8, 46]인 경우 출력은 [[2, 8], [46 , 61]]
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- cut_start, cut_end :=자르기
- ans :=새 목록
- 시작할 때마다 간격으로 끝내고
- cut_start 및 start의 최대값이 end 및 cut_end의 최소값인 경우
- 시작
- 간격 [start, cut_start] 삽입
- 시작
- 끝이면> cut_end이면
- 간격 [cut_end, end] 삽입
- cut_start 및 start의 최대값이 end 및 cut_end의 최소값인 경우
- 그렇지 않으면
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
class Solution: def solve(self, intervals, cut): cut_start, cut_end = cut ans = [] for start, end in intervals: if max(cut_start, start) < min(end, cut_end): if start < cut_start: ans.append([start, cut_start]) if end > cut_end: ans.append([cut_end, end]) else: ans.append([start, end]) return ans ob = Solution() intervals = [[2, 11],[13, 31],[41, 61]] cut = [8, 46] print(ob.solve(intervals, cut))
입력
[[2, 11],[13, 31],[41, 61]], [8, 46]
출력
[[2, 8], [46, 61]]