Skip to content

Commit c5d1d4d

Browse files
committed
feat: solve #279 with python
1 parent 7643d32 commit c5d1d4d

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

non-overlapping-intervals/EGON.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from typing import List
2+
from unittest import TestCase, main
3+
4+
5+
class Solution:
6+
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
7+
return self.solve_stack(intervals)
8+
9+
"""
10+
LintCode 로그인이 안되어서 hhttps://neetcode.io/problems/meeting-schedule 에서 실행시키고 통과만 확인했습니다.
11+
12+
Runtime: 66 ms (Beats 85.10%)
13+
Time Complexity: O(n log n)
14+
- intervals를 정렬하는데 O(n log n)
15+
- intervals를 조회하며 result stack을 갱신하는데 O(n)
16+
- 2항에 대한 or 연산 및 append 메서드만 쓰므로 * O(1)
17+
> O(n log n) + O(n) ~= O(n log n)
18+
Memory: 50.98 MB (Beats 74.30%)
19+
Space Complexity: O(n)
20+
- intervals 정렬도 기존 intervals를 사용하므로 O(1)
21+
- result의 크기가 최대 interval과 같아질 수 있으므로 O(n)
22+
> O(1) + O(n) ~= O(n)
23+
"""
24+
def solve_stack(self, intervals: List[List[int]]) -> int:
25+
if not intervals:
26+
return 0
27+
28+
intervals.sort(key=lambda x: x[1])
29+
result = []
30+
for interval in intervals:
31+
if not result or interval[0] >= result[-1][1]:
32+
result.append(interval)
33+
34+
return len(intervals) - len(result)
35+
36+
37+
class _LeetCodeTestCases(TestCase):
38+
def test_1(self):
39+
intervals = [[1,2],[2,3],[3,4],[1,3]]
40+
output = 1
41+
self.assertEqual(Solution().eraseOverlapIntervals(intervals), output)
42+
43+
44+
if __name__ == '__main__':
45+
main()

0 commit comments

Comments
 (0)