Skip to content

Commit 982497c

Browse files
committed
Time: 258 ms (72.24%), Space: 46.2 MB (97.84%) - LeetHub
1 parent 9962c37 commit 982497c

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
struct Job {
2+
int start, end, profit;
3+
};
4+
5+
class Solution {
6+
public:
7+
int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {
8+
int n = (int)startTime.size();
9+
10+
Job arr[n];
11+
for(int i = 0; i < n; i++) {
12+
arr[i].start = startTime[i];
13+
arr[i].end = endTime[i];
14+
arr[i].profit = profit[i];
15+
}
16+
sort(arr, arr + n, [&](auto &j1, auto &j2){
17+
if(j1.end == j2.end)
18+
return j1.profit > j2.profit;
19+
return j1.end < j2.end;
20+
});
21+
22+
vector<int> dp(n+1, 0); // dp[i] = maximum profit earned till jobs(1...i)
23+
dp[1] = arr[0].profit;
24+
25+
for(int i = 2; i <= n; i++) {
26+
int l = 0, r = i - 2, j = 0;
27+
28+
while(l <= r) {
29+
int mid = l + (r - l) / 2;
30+
31+
if(arr[mid].end <= arr[i - 1].start) {
32+
j = mid + 1;
33+
l = mid + 1;
34+
}
35+
else { r = mid - 1; }
36+
}
37+
dp[i] = max(dp[i - 1], arr[i - 1].profit + dp[j]);
38+
}
39+
return dp[n];
40+
}
41+
};

0 commit comments

Comments
 (0)