📖 Scenario: You are managing a small workshop where you have several jobs to complete. Each job has a deadline and a profit if finished on time. You want to schedule jobs to maximize your total profit without missing deadlines.
🎯 Goal: Build a program that schedules jobs with deadlines to maximize profit. You will create the job list, set the maximum deadline, select jobs to maximize profit, and finally print the scheduled jobs.
📋 What You'll Learn
Create a slice of jobs with exact fields and values
Create a variable for the maximum deadline
Implement the job scheduling logic to maximize profit
Print the scheduled jobs in order of their scheduled time slots
💡 Why This Matters
🌍 Real World
Job scheduling is used in manufacturing, computing, and project management to optimize resource use and maximize profit or efficiency.
💼 Career
Understanding job scheduling algorithms is important for roles in software development, operations management, and systems engineering.
Progress0 / 4 steps
1
Create the list of jobs
Create a slice called jobs of type Job with these exact entries: {"id": "a", "deadline": 2, "profit": 100}, {"id": "b", "deadline": 1, "profit": 19}, {"id": "c", "deadline": 2, "profit": 27}, {"id": "d", "deadline": 1, "profit": 25}, {"id": "e", "deadline": 3, "profit": 15}. Define the Job struct with fields id string, deadline int, and profit int.
DSA Go
Hint
Define the Job struct first, then create the jobs slice with the exact jobs listed.
2
Set the maximum deadline
Create an integer variable called maxDeadline and set it to 3.
DSA Go
Hint
Just create a variable maxDeadline and assign it the value 3.
3
Schedule jobs to maximize profit
Sort the jobs slice in descending order by profit. Then create a slice called result of strings with length maxDeadline initialized with empty strings. Create a boolean slice called slot with length maxDeadline initialized with false. Use a for loop with variable i to iterate over jobs. Inside, use another for loop with variable j starting from jobs[i].deadline - 1 down to 0. If slot[j] is false, assign jobs[i].id to result[j], set slot[j] to true, and break the inner loop.
DSA Go
Hint
Sort jobs by profit descending. Create result and slot slices. Use nested loops to assign jobs to free slots before their deadlines.
4
Print the scheduled jobs
Use a for loop with variable i from 0 to maxDeadline - 1. Inside the loop, print the string "Slot " plus i+1 plus ": " plus result[i].
DSA Go
Hint
Loop through result and print each slot number and the job id assigned to it.
Practice
(1/5)
1. What is the main goal of the Job Scheduling with Deadlines problem?
easy
A. Schedule jobs in the order they appear without considering deadlines
B. Minimize the number of jobs scheduled
C. Maximize the total profit by scheduling jobs before their deadlines
D. Maximize the number of jobs scheduled regardless of profit
Solution
Step 1: Understand the problem objective
The problem aims to schedule jobs so that each job finishes before its deadline and the total profit is maximized.
Step 2: Identify the correct goal
Maximizing total profit while respecting deadlines is the key goal, not just scheduling all jobs or ignoring deadlines.
Final Answer:
Maximize the total profit by scheduling jobs before their deadlines -> Option C
Quick Check:
Goal = Maximize profit before deadlines [OK]
Hint: Focus on profit maximization within deadlines [OK]
Common Mistakes:
Ignoring deadlines and scheduling all jobs
Trying to minimize jobs instead of maximizing profit
Scheduling jobs in input order without sorting
2. Which Go data structure is best suited to efficiently pick the next available time slot when scheduling jobs by deadline?
easy
A. Map (hash table)
B. Disjoint Set (Union-Find)
C. Slice (dynamic array)
D. Linked List
Solution
Step 1: Understand the scheduling requirement
We need to quickly find and assign the latest free slot before a job's deadline.
Step 2: Identify the suitable data structure
Disjoint Set (Union-Find) efficiently tracks and merges available slots, making it ideal for this task.
Final Answer:
Disjoint Set (Union-Find) -> Option B
Quick Check:
Best structure for slot tracking = Disjoint Set [OK]
Hint: Use Disjoint Set to find free slots fast [OK]
Common Mistakes:
Using slices which require linear search
Using maps which don't track slot unions
Using linked lists which are inefficient for this
3. What is the output of the following Go code snippet that schedules jobs with deadlines and profits?
package main
import "fmt"
type Job struct {
id string
deadline int
profit int
}
func main() {
jobs := []Job{{"a", 2, 100}, {"b", 1, 19}, {"c", 2, 27}, {"d", 1, 25}, {"e", 3, 15}}
// Assume jobs are sorted by profit descending
scheduled := []string{"a", "c", "e"}
fmt.Println(scheduled)
}
medium
A. ["a", "c", "e"]
B. ["b", "d", "e"]
C. ["a", "b", "c"]
D. ["a", "d", "e"]
Solution
Step 1: Analyze the job list and sorting
Jobs are sorted by profit descending: a(100), c(27), d(25), b(19), e(15). The code assumes scheduled jobs are a, c, e.
Step 2: Check feasibility of scheduled jobs
Job a (deadline 2), c (deadline 2), e (deadline 3) can be scheduled without conflict, maximizing profit.
Final Answer:
["a", "c", "e"] -> Option A
Quick Check:
Scheduled jobs = ["a", "c", "e"] [OK]
Hint: Pick jobs by profit, fit before deadlines [OK]
Common Mistakes:
Ignoring deadlines and picking all high profit jobs
Confusing job order in output
Assuming jobs b or d are scheduled incorrectly
4. Identify the bug in this Go code snippet for job scheduling:
func scheduleJobs(jobs []Job) []string {
sort.Slice(jobs, func(i, j int) bool {
return jobs[i].profit > jobs[j].profit
})
result := []string{}
slots := make([]bool, len(jobs))
for _, job := range jobs {
for j := job.deadline; j >= 0; j-- {
if !slots[j] {
slots[j] = true
result = append(result, job.id)
break
}
}
}
return result
}
medium
A. Slots array size should be job.deadline, not len(jobs)
B. Jobs should be sorted by deadline, not profit
C. Loop index j should not go below 1
D. Loop index j should start from job.deadline - 1
Solution
Step 1: Check loop index range for slot assignment
The inner loop runs from job.deadline down to 0, but slot indices start at 0, so job.deadline is out of range.
Step 2: Correct loop start index
Loop should start at job.deadline - 1 to match zero-based indexing of slots array.
Final Answer:
Loop index j should start from job.deadline - 1 -> Option D
Quick Check:
Indexing starts at deadline-1 [OK]
Hint: Remember zero-based indexing for slots array [OK]
Common Mistakes:
Starting loop at job.deadline causing index out of range
Not sorting jobs by profit first
Ignoring zero-based indexing in Go slices
5. Given jobs with deadlines and profits: {J1: deadline=4, profit=70}, {J2: deadline=1, profit=80}, {J3: deadline=1, profit=30}, {J4: deadline=2, profit=100}, {J5: deadline=3, profit=40}, what is the maximum total profit achievable by scheduling jobs before their deadlines?