Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Job Sequencing Problem | Set 3 (Using TreeSet in JAVA)

  • Difficulty Level : Hard
  • Last Updated : 11 Dec, 2018

Given an array of jobs where every job has a deadline and associated profit (if the job is finished before the deadline). It is also given that every job takes a single unit of time, so the minimum possible deadline for any job is 1. How to maximize total profit if only one job can be scheduled at a time.


Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Input : Four Jobs with following deadlines and profits
  JobID    Deadline      Profit
    a        4            20   
    b        1            10
    c        1            40  
    d        1            30
Output : Following is maximum profit sequence of jobs
         c, a 
Input : Five Jobs with following deadlines and profits
   JobID     Deadline     Profit
     a         2           100
     b         1           19
     c         2           27
     d         1           25
     e         3           15
Output : Following is maximum profit sequence of jobs
         c, a, e

Below is the step by step algorithm to solve the problem using TreeSet in Java:

  1. Sort all the jobs according to their respective profits in decreasing order.
  2. Create a TreeSet and insert all the integers from 0 to n-1.
  3. Traverse the array of jobs and for ith job
    • Search for a time slot ‘x’ in the TreeSet with maximum value which is less than the deadline of the ith job.
    • If any value exists then include that job in the answer and remove ‘x’ from the TreeSet
    • Else check for the remaining jobs.

Below is the implementation of the above algorithm:

import java.util.*;
public class Solution {
    // Job class
    public static class Job {
        char id;
        int deadline;
        int profit;
        // Constructor
        Job(char id, int deadline, int profit)
   = id;
            this.deadline = deadline;
            this.profit = profit;
    public static class Sorted implements Comparator {
        // Function to implement comparator
        public int compare(Object o1, Object o2)
            Job j1 = (Job)o1;
            Job j2 = (Job)o2;
            if (j1.profit != j2.profit)
                return j2.profit - j1.profit;
                return j2.deadline - j1.deadline;
    // Function to print job scheduling
    public static void printJobScheduling(Job jobs[], int n)
        // Creating object of Sorted class
        Sorted sorter = new Sorted();
        Arrays.sort(jobs, sorter);
        // Creating TreeSet Object
        TreeSet<Integer> ts = new TreeSet<>();
        for (int i = 0; i < n; i++)
        for (int i = 0; i < n; i++) {
            Integer x = ts.floor(jobs[i].deadline - 1);
            if (x != null) {
                System.out.print(jobs[i].id + " ");
    // Driver Code
    public static void main(String[] args)
        int n = 5;
        Job[] jobs = new Job[n];
        jobs[0] = new Job('a', 2, 100);
        jobs[1] = new Job('b', 1, 19);
        jobs[2] = new Job('c', 2, 27);
        jobs[3] = new Job('d', 1, 25);
        jobs[4] = new Job('e', 3, 15);
        printJobScheduling(jobs, n);
    // Contributed by Dipesh Jain (dipesh_jain)

Time Complexity: O(N*log(N))
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up
Recommended Articles
Page :