Skip to content

Commit 34f24b1

Browse files
authored
Merge pull request #199 from SamTheKorean/main
[SAM] Week 13 solutions
2 parents e579568 + d24538b commit 34f24b1

File tree

5 files changed

+91
-0
lines changed

5 files changed

+91
-0
lines changed

insert-interval/samthekorean.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# TC : O(n + m)
2+
# SC : O(n + m)
3+
# n is a size of intervals and m is a size of newInterval
4+
class Solution:
5+
def insert(
6+
self, intervals: List[List[int]], newInterval: List[int]
7+
) -> List[List[int]]:
8+
result = []
9+
i = 0
10+
11+
while i < len(intervals) and intervals[i][1] < newInterval[0]:
12+
result.append(intervals[i])
13+
i += 1
14+
15+
while i < len(intervals) and intervals[i][0] <= newInterval[1]:
16+
newInterval[0] = min(newInterval[0], intervals[i][0])
17+
newInterval[1] = max(newInterval[1], intervals[i][1])
18+
i += 1
19+
20+
result.append(newInterval)
21+
22+
while i < len(intervals):
23+
result.append(intervals[i])
24+
i += 1
25+
26+
return result

meeting-rooms-ii/samthekorean.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# TS : O(n log n)
2+
# SC : O(n)
3+
class Solution:
4+
def minMeetingRooms(self, intervals: List[List[int]]) -> int:
5+
pairs = []
6+
for start, end in intervals:
7+
pairs += [(start, 1), (end, -1)]
8+
pairs.sort()
9+
10+
max_cnt, cnt = 0, 0
11+
for pair in pairs:
12+
cnt += pair[1]
13+
max_cnt = max(cnt, max_cnt)
14+
return max_cnt

merge-intervals/samthekorean.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# TC : O(nlog n)
2+
# SC : O(n)
3+
class Solution:
4+
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
5+
merged = []
6+
intervals.sort(key=lambda x: x[0])
7+
8+
prev = intervals[0]
9+
10+
for interval in intervals[1:]:
11+
if interval[0] <= prev[1]:
12+
prev[1] = max(prev[1], interval[1])
13+
else:
14+
merged.append(prev)
15+
prev = interval
16+
17+
merged.append(prev)
18+
19+
return merged
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# TC : O(n log n)
2+
# SC : O(n)
3+
class Solution:
4+
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
5+
res = 0
6+
7+
intervals.sort(key=lambda x: x[1])
8+
prev_end = intervals[0][1]
9+
10+
for i in range(1, len(intervals)):
11+
if prev_end > intervals[i][0]:
12+
res += 1
13+
else:
14+
prev_end = intervals[i][1]
15+
16+
return res

rotate-image/samthekorean.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# TC : O(n^2)
2+
# SC : O(1)
3+
class Solution:
4+
def rotate(self, matrix: List[List[int]]) -> None:
5+
top, bottom = 0, len(matrix) - 1
6+
7+
while top < bottom:
8+
left, right = top, bottom
9+
for i in range(bottom - top):
10+
topLeft = matrix[top][left + i]
11+
matrix[top][left + i] = matrix[bottom - i][left]
12+
matrix[bottom - i][left] = matrix[bottom][right - i]
13+
matrix[bottom][right - i] = matrix[top + i][right]
14+
matrix[top + i][right] = topLeft
15+
16+
top, bottom = top + 1, bottom - 1

0 commit comments

Comments
 (0)