Skip to content

[Leo] 13th Week solutions #201

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 28, 2024
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)