File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed
non-overlapping-intervals Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change 1+ # https://leetcode.com/problems/non-overlapping-intervals/
2+
3+ from typing import List
4+
5+ class Solution :
6+ def eraseOverlapIntervals1 (self , intervals : List [List [int ]]) -> int :
7+ """
8+ [Complexity]
9+ - TC: O(nlogn) (sort)
10+ - SC: O(1) (tim sort -> ์ต์
์ ๊ฒฝ์ฐ O(n)๊น์ง ๊ฐ๋ฅ)
11+
12+ [Approach]
13+ intervals๋ฅผ start ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ, greedy ํ๊ฒ ํญ์ ์์ end๋ฅผ ๊ฐ์ง๋ interval์ ์ ํํ๋ค.
14+ """
15+ # sort asc by start
16+ intervals .sort (key = lambda x : x [0 ])
17+
18+ # initialize prev_e
19+ prev_e = intervals [0 ][0 ] - 1
20+ to_be_removed = 0
21+
22+ for s , e in intervals :
23+ # (1) overlapping : greedyํ๊ฒ prev_e์ e ์ค ๋ ์์ ๊ฐ์ผ๋ก prev_e๋ฅผ ์
๋ฐ์ดํธํ๊ณ , ์ ๊ฑฐํ interval ์ ์ฆ๊ฐ
24+ if prev_e > s :
25+ prev_e = min (prev_e , e )
26+ to_be_removed += 1
27+ # (2) non-overlapping : prev_e๋ง ์
๋ฐ์ดํธ
28+ else :
29+ prev_e = e
30+
31+ return to_be_removed
32+
33+ def eraseOverlapIntervals (self , intervals : List [List [int ]]) -> int :
34+ """
35+ [Complexity]
36+ - TC: O(nlogn) (sort)
37+ - SC: O(1) (tim sort -> ์ต์
์ ๊ฒฝ์ฐ O(n)๊น์ง ๊ฐ๋ฅ)
38+
39+ [Approach]
40+ ์ด์ ํ์ด์ (1) overlapping ๋จ๊ณ์์ prev_e์ e ์ค min์ ๊ณ ๋ฅด๋ ๋ก์ง์ ์ ๊ฑฐํ๋ ค๋ฉด, intervals๋ฅผ end ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ฉด ๋๋ค.
41+ """
42+ # sort asc by end
43+ intervals .sort (key = lambda x : x [1 ])
44+
45+ # initialize prev_e
46+ prev_e = intervals [0 ][0 ] - 1
47+ to_be_removed = 0
48+
49+ for s , e in intervals :
50+ # (1) overlapping : greedyํ๊ฒ prev_e์ e ์ค ๋ ์์ ๊ฐ์ผ๋ก ์ ํํ๋ฉด ๋๋ฏ๋ก prev_e๋ฅผ ๊ทธ๋๋ก ๋๊ณ , ์ ๊ฑฐํ interval ์ ์ฆ๊ฐ
51+ if prev_e > s :
52+ to_be_removed += 1
53+ # (2) non-overlapping : prev_e๋ง ์
๋ฐ์ดํธ
54+ else :
55+ prev_e = e
56+
57+ return to_be_removed
You canโt perform that action at this time.
0 commit comments