1235. Maximum Profit in Job Scheduling
Description
We have n
jobs, where every job is scheduled to be done from startTime[i]
to endTime[i]
, obtaining a profit of profit[i]
.
You're given the startTime
, endTime
and profit
arrays, return the maximum profit you can take such that there are no two jobs in the subset with overlapping time range.
If you choose a job that ends at time X
you will be able to start another job that starts at time X
.
Constraints
1 <= startTime.length == endTime.length == profit.length <= 5 * 104
1 <= startTime[i] < endTime[i] <= 109
1 <= profit[i] <= 104
Approach
Links
GeeksforGeeks
ProgramCreek
YouTube
Examples
Input:
startTime = [1, 2, 3, 3]
endTime = [3, 4, 5, 6]
profit = [50, 10, 40, 70]

Output: 120
Explanation:
The subset chosen is the first and fourth job.
Time range [1-3]+[3-6] , we get profit of 120 = 50 + 70.
Solutions
/**
* Time complexity :
* Space complexity :
*/
// Time Limit Error
class Solution {
private class Job implements Comparable<Job> {
int startTime;
int endTime;
int profit;
Job(int startTime, int endTime, int profit) {
this.startTime = startTime;
this.endTime = endTime;
this.profit = profit;
}
public int compareTo(Job otherJob) {
int d = this.endTime-otherJob.endTime;
return d == 0? (this.startTime-otherJob.startTime): d;
}
}
public int jobScheduling(int[] startTime, int[] endTime, int[] profit) {
int n = profit.length;
Job[] jobs = new Job[n];
for(int i = 0; i < n; i++) {
jobs[i] = new Job(startTime[i], endTime[i], profit[i]);
}
Arrays.sort(jobs);
int[] dp = new int[n];
int maxProfit = 0;
for(int i = 0; i < n; i++) {
dp[i] = jobs[i].profit;
for(int j = 0; j < i; j++) {
if(jobs[j].endTime <= jobs[i].startTime) {
dp[i] = Math.max(dp[i], jobs[i].profit+dp[j]);
}
}
maxProfit = Math.max(maxProfit, dp[i]);
}
return maxProfit;
}
}
Follow up
Last updated
Was this helpful?