각 목록이 간격 [시작, 끝](포함)을 나타내는 간격 목록이 있다고 가정합니다. 우리는 그것이 다루는 총 고유 지속 시간을 찾아야 합니다.
따라서 입력이 간격 =[[2, 11],[13, 31],[41, 61]]과 같으면 총 고유 적용 거리가 (11 - 2 + 1)이므로 출력은 50이 됩니다. =10 다음 (31 - 13 + 1) =19 및 (61 - 41 + 1) =21이므로 합계는 50입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 간격 목록이 비어 있으면
- 0을 반환
- 목록 간격 정렬
- [시작, 종료] :=간격[0]
- ans :=0
- 각 시작 및 끝(s, e) 간격에 대해 다음을 수행합니다.
- 만약 s>끝이면
- ans :=ans + end - 시작 + 1
- 시작 :=s, 끝 :=e
- 그렇지 않으면
- end :=끝의 최대값, e
- 만약 s>끝이면
- ans :=ans + end - 시작 + 1
- 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def solve(self, intervals): if not intervals: return 0 intervals.sort() start, end = intervals[0] ans = 0 for s, e in intervals: if s > end: ans += end - start + 1 start = s end = e else: end = max(end, e) ans += end - start + 1 return ans ob = Solution() intervals = [[2, 11],[13, 31],[41, 61]] print(ob.solve(intervals))
입력
[[2, 11],[13, 31],[41, 61]]
출력
50