Skip to content

Commit 343ec33

Browse files
committed
solve(w12): 435. Non-overlapping Intervals
1 parent 2b442c9 commit 343ec33

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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

0 commit comments

Comments
ย (0)