Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions insert-interval/Leo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
left = []
right = []

for interval in intervals:
if interval[1] < newInterval[0]:
left.append(interval)
elif interval[0] > newInterval[1]:
right.append(interval)
else:
newInterval[0] = min(newInterval[0], interval[0])
newInterval[1] = max(newInterval[1], interval[1])

return left + [newInterval] + right

## TC: O(n), SC: O(n)
19 changes: 19 additions & 0 deletions meeting-rooms-ii/Leo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class Solution:
def minMeetingRooms(self, intervals: List[List[int]]) -> int:
if not intervals:
return 0

rooms_needed, end_pointer = 0, 0

start_times = sorted([interval[0] for interval in intervals])
end_times = sorted([interval[1] for interval in intervals])

for i in range(len(start_times)):
if start_times[i] >= end_times[end_pointer]:
end_pointer += 1
else:
rooms_needed += 1

return rooms_needed

## TC: O(nlogn), SC: O(n)
20 changes: 20 additions & 0 deletions merge-intervals/Leo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
def sort_key(interval):
return interval[0]

intervals.sort(key=sort_key)

result = [intervals[0]]

for start, end in intervals[1:]:
lastEnd = result[-1][1]

if start <= lastEnd:
result[-1][1] = max(lastEnd, end)
else:
result.append([start, end])

return result

## TC: O(nlogn), SC: O(n)
16 changes: 16 additions & 0 deletions non-overlapping-intervals/Leo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
last_end = -math.inf
overlap_count = 0

sorted_intervals = sorted(intervals, key=lambda interval: interval[1])

for start, end in sorted_intervals:
if start >= last_end:
last_end = end
else:
overlap_count += 1

return overlap_count

## TC: O(nlogn), SC: O(n)
14 changes: 14 additions & 0 deletions rotate-image/Leo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
matrix.reverse()

n = len(matrix)

for i in range(n):
for j in range(i + 1, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

## TC: O(n^2), SC: O(1)