Given N jobs where every job is represented by following three elements of it.
Start Time
Finish Time
Profit or Value Associated (>= 0)
Find the maximum profit subset of jobs such that no two jobs in the subset overlap.
Example:
Input: Number of Jobs n = 4
Job Details {Start Time, Finish Time, Profit}
Job 1: {1, 2, 50}
Job 2: {3, 5, 20}
Job 3: {6, 19, 100}
Job 4: {2, 100, 200}
Output: The maximum profit is 250.
We can get the maximum profit by scheduling jobs 1 and 4.
Note that there is longer schedules possible Jobs 1, 2 and 3
but the profit with this schedule is 20+50+100 which is less than 250.
classSolution {staticclassJob {int start, finish, profit; }publicintbinarySearch(Job[] jobs,int index) {int lo =0, hi = index -1;while (lo <= hi) {int mid = (lo + hi) /2;if (jobs[mid].finish<= jobs[index].start) {if (jobs[mid +1].finish<= jobs[index].start) lo = mid +1;elsereturn mid; } else hi = mid -1; }return-1; }publicintschedule(Job[] jobs) {Arrays.sort(jobs, (a, b) ->a.finish-b.finish);int n =jobs.length;int[] table =newint[n]; table[0] = jobs[0].profit;for (int i =1; i < n; i++) {int inclProf = jobs[i].profit;int l =binarySearch(jobs, i);if (l !=-1) inclProf += table[l]; table[i] =Math.max(inclProf, table[i -1]); }return table[n -1]; }}