class Solution {
public:
const int N = 5 * 1e4 + 10;
int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {
int dp[N];
vector<vector<int>> jobs;
for (int i = 0; i < startTime.size(); i ++) {
jobs.push_back({startTime[i], endTime[i], profit[i]});
}
sort(jobs.begin(), jobs.end(), [](vector<int> &a, vector<int> &b) -> bool{
return a[1] < b[1];
});
dp[0] = jobs[0][2];
for (int i = 1; i < jobs.size(); i ++) {
dp[i] = dp[i - 1];
int j = i - 1; //j是离i最近的可以选的工作
//没有使用二分去优化查找
while (j >= 0 && jobs[j][1] > jobs[i][0]) {
j --;
}
//特判
if (j == -1) dp[i] = max(dp[i], jobs[i][2]);
else {
dp[i] = max(dp[i], dp[j] + jobs[i][2]);
}
}
return dp[jobs.size() - 1];
}
};
力扣1235_规划兼职工作
最新推荐文章于 2024-11-27 17:46:21 发布