Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Course Schedule III

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "630" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

There are n different online courses numbered from 1 to n. You are given an array courses where courses[i] = [durationi, lastDayi] indicate that the ith course should be taken continuously for durationi days and must be finished before or on lastDayi. You will start on the 1st day and you cannot take two or more courses simultaneously. Return the maximum number of courses that you can take. Example 1: Input: courses = [[100,200],[200,1300],[1000,1250],[2000,3200]] Output: 3 Explanation: There are totally 4 courses, but you can take 3 courses at most: First, take the 1st course, it costs 100 days so you will finish it on the 100th day, and ready to take the next course on the 101st day. Second, take the 3rd course, it costs 1000 days so you will finish it on the 1100th day, and ready to take the next course on the 1101st day. Third, take the 2nd course, it costs 200 days so you will finish it on the 1300th day. The 4th course cannot be taken now, since you will finish it on the 3300th day, which exceeds the closed date. Example 2: Input: courses = [[1,2]] Output: 1 Example 3: Input: courses = [[3,2],[4,3]] Output: 0 Constraints: 1 <= courses.length <= 104 1 <= durationi, lastDayi <= 104

Explanation

Here's the breakdown of the solution:

  • Greedy Approach: Sort courses by their last day. This prioritizes courses with earlier deadlines, maximizing the chance to fit in more courses.
  • Priority Queue (Max Heap): Use a max heap to track the durations of the courses currently taken. If adding a new course exceeds its deadline, check if it's possible to replace the longest course taken so far with the new course. This optimizes the selection.

  • Runtime Complexity: O(n log n) due to sorting and heap operations. Storage Complexity: O(n) due to the heap.

Code

    import heapq

def scheduleCourse(courses):
    """
    Schedules courses to maximize the number of courses taken.

    Args:
        courses: A list of courses, where each course is a list [duration, lastDay].

    Returns:
        The maximum number of courses that can be taken.
    """
    courses.sort(key=lambda x: x[1])  # Sort by last day
    heap = []  # Max heap to store durations of taken courses
    time = 0  # Current time

    for duration, last_day in courses:
        time += duration
        heapq.heappush(heap, -duration)  # Push duration as negative for max heap

        if time > last_day:
            time += heapq.heappop(heap)  # Remove the longest course taken so far

    return len(heap)

More from this blog

C

Chatmagic blog

2894 posts