Bird
Raised Fist0
DSA C#programming~5 mins

Job Scheduling with Deadlines in DSA C# - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Job Scheduling with Deadlines
O(n^2)
Understanding Time Complexity

We want to understand how the time needed to schedule jobs changes as the number of jobs grows.

How does the scheduling process scale when we have more jobs with deadlines?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


// Job class with deadline and profit
class Job {
    public int Id, Deadline, Profit;
    public Job(int id, int deadline, int profit) {
        Id = id; Deadline = deadline; Profit = profit;
    }
}

// Scheduling jobs to maximize profit
void JobScheduling(Job[] jobs, int n) {
    Array.Sort(jobs, (a, b) => b.Profit.CompareTo(a.Profit));
    bool[] slot = new bool[n];
    for (int i = 0; i < n; i++) {
        for (int j = Math.Min(n, jobs[i].Deadline) - 1; j >= 0; j--) {
            if (!slot[j]) { slot[j] = true; break; }
        }
    }
}
    

This code sorts jobs by profit and tries to schedule each job before its deadline in the latest free slot.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Nested loops where for each job we check slots backward to find a free spot.
  • How many times: Outer loop runs n times (for each job), inner loop runs up to n times (checking slots).
How Execution Grows With Input

As the number of jobs increases, the number of checks grows roughly by the square of the input size.

Input Size (n)Approx. Operations
10Up to 100 checks
100Up to 10,000 checks
1000Up to 1,000,000 checks

Pattern observation: Doubling the number of jobs roughly quadruples the work done.

Final Time Complexity

Time Complexity: O(n2)

This means the time needed grows roughly with the square of the number of jobs.

Common Mistake

[X] Wrong: "Since we sort jobs first, the scheduling must be fast and close to linear time."

[OK] Correct: Sorting is only part of the work; the nested loops to find free slots dominate and cause quadratic growth.

Interview Connect

Understanding this time complexity helps you explain how scheduling algorithms behave as tasks increase, showing your grasp of algorithm efficiency.

Self-Check

"What if we used a more efficient data structure to find free slots? How would the time complexity change?"

Practice

(1/5)
1. What is the main goal of the Job Scheduling with Deadlines problem?
easy
A. Maximize total profit by scheduling jobs before their deadlines
B. Minimize the number of jobs scheduled
C. Schedule jobs in the order they arrive without considering deadlines
D. Maximize the number of jobs scheduled regardless of profit

Solution

  1. Step 1: Understand the problem goal

    The problem aims to schedule jobs so that each job finishes before its deadline.
  2. Step 2: Identify the optimization criteria

    We want to maximize the total profit earned by scheduling jobs within their deadlines.
  3. Final Answer:

    Maximize total profit by scheduling jobs before their deadlines -> Option A
  4. Quick Check:

    Goal = Maximize profit [OK]
Hint: Focus on profit maximization within deadlines [OK]
Common Mistakes:
  • Thinking the goal is to schedule all jobs regardless of profit
  • Ignoring deadlines when scheduling
  • Assuming jobs must be scheduled in input order
2. Which of the following C# code snippets correctly sorts an array of jobs by their profit in descending order?
easy
A. Array.Sort(jobs, (a, b) => a.Profit.CompareTo(b.Profit));
B. Array.Sort(jobs, (a, b) => b.Profit.CompareTo(a.Profit));
C. jobs.OrderBy(job => job.Profit);
D. jobs.OrderByDescending(job => job.Deadline);

Solution

  1. Step 1: Identify sorting by profit descending

    Sorting by profit descending means higher profit first, so compare b.Profit to a.Profit.
  2. Step 2: Check C# syntax for Array.Sort with custom comparer

    Array.Sort with lambda (a, b) => b.Profit.CompareTo(a.Profit) sorts descending by profit.
  3. Final Answer:

    Array.Sort(jobs, (a, b) => b.Profit.CompareTo(a.Profit)); -> Option B
  4. Quick Check:

    Descending profit sort = Array.Sort(jobs, (a, b) => b.Profit.CompareTo(a.Profit)); [OK]
Hint: Use b.CompareTo(a) for descending order in C# [OK]
Common Mistakes:
  • Using a.Profit.CompareTo(b.Profit) which sorts ascending
  • Using OrderBy instead of OrderByDescending for descending
  • Sorting by deadline instead of profit
3. Given the following jobs with (JobId, Deadline, Profit): (1, 2, 100), (2, 1, 19), (3, 2, 27), (4, 1, 25), (5, 3, 15), what is the maximum profit achievable by scheduling jobs before their deadlines?
medium
A. 127
B. 115
C. 142
D. 100

Solution

  1. Step 1: Sort jobs by profit descending

    Sorted jobs: (1,2,100), (3,2,27), (4,1,25), (2,1,19), (5,3,15)
  2. Step 2: Schedule jobs greedily before deadlines

    Schedule Job 1 at slot 2, Job 3 at slot 1 (since slot 2 taken), Job 5 at slot 3. Jobs 4 and 2 cannot be scheduled as slots 1 and 2 are taken.
  3. Step 3: Calculate total profit

    Profit = 100 + 27 + 15 = 142
  4. Final Answer:

    142 -> Option C
  5. Quick Check:

    Max profit = 142 [OK]
Hint: Schedule highest profit jobs first in latest free slot [OK]
Common Mistakes:
  • Scheduling jobs without sorting by profit
  • Assigning jobs to earliest slots instead of latest free slot
  • Counting jobs that miss deadlines
4. Identify the error in the following C# code snippet for job scheduling:
Array.Sort(jobs, (a, b) => a.Profit.CompareTo(b.Profit));
foreach (var job in jobs) {
  for (int slot = job.Deadline; slot > 0; slot--) {
    if (timeSlots[slot] == false) {
      timeSlots[slot] = true;
      totalProfit += job.Profit;
      break;
    }
  }
}
medium
A. totalProfit should be incremented outside the loop
B. Loop should start from slot = 1 to deadline, not reverse
C. timeSlots array indexing is off by one
D. Jobs are sorted in ascending profit order, should be descending

Solution

  1. Step 1: Check sorting order

    Sorting by a.Profit.CompareTo(b.Profit) sorts ascending, but we need descending to maximize profit.
  2. Step 2: Verify scheduling logic

    The loop tries to assign job to latest free slot before deadline, which is correct.
  3. Final Answer:

    Jobs are sorted in ascending profit order, should be descending -> Option D
  4. Quick Check:

    Sort descending by profit [OK]
Hint: Sort jobs by descending profit to maximize total profit [OK]
Common Mistakes:
  • Sorting ascending profit by mistake
  • Incorrect slot iteration direction
  • Misindexing timeSlots array
5. You have 4 jobs with (JobId, Deadline, Profit): (1, 4, 20), (2, 1, 10), (3, 1, 40), (4, 1, 30). Using the job scheduling algorithm, which jobs will be scheduled and what is the total profit?
hard
A. Jobs: 3, 1; Total Profit: 60
B. Jobs: 3, 4, 1; Total Profit: 90
C. Jobs: 1, 2; Total Profit: 30
D. Jobs: 4, 1; Total Profit: 50

Solution

  1. Step 1: Sort jobs by profit descending

    Sorted: (3,1,40), (4,1,30), (1,4,20), (2,1,10)
  2. Step 2: Schedule jobs in latest free slot before deadline

    Job 3 scheduled at slot 1, Job 4 cannot be scheduled (slot 1 taken), Job 1 scheduled at slot 4, Job 2 cannot be scheduled (slot 1 taken)
  3. Step 3: Calculate total profit

    Total profit = 40 + 20 = 60
  4. Final Answer:

    Jobs: 3, 1; Total Profit: 60 -> Option A
  5. Quick Check:

    Schedule highest profit jobs first [OK]
Hint: Schedule highest profit jobs first in latest free slot [OK]
Common Mistakes:
  • Trying to schedule all jobs ignoring slot availability
  • Scheduling jobs in input order
  • Not checking slot availability correctly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard