LeetCode 1235. Maximum Profit in Job Scheduling


原题链接在这里:https://leetcode.com/problems/maximum-profit-in-job-scheduling/

题目:

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 startTimeendTime 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.

Example 1:

LeetCode 1235. Maximum Profit in Job Scheduling

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.

Example 2:

LeetCode 1235. Maximum Profit in Job Scheduling

Input: startTime = [1,2,3,4,6], endTime = [3,5,10,6,9], profit = [20,20,100,70,60]
Output: 150
Explanation: The subset chosen is the first, fourth and fifth job. 
Profit obtained 150 = 20 + 70 + 60.

Example 3:

LeetCode 1235. Maximum Profit in Job Scheduling

Input: startTime = [1,1,1], endTime = [2,3,4], profit = [5,6,4]
Output: 6

 

Constraints:

  • 1 <= startTime.length == endTime.length == profit.length <= 5 * 104
  • 1 <= startTime[i] < endTime[i] <= 109
  • 1 <= profit[i] <= 104

题解:

Have a dp[j], which means up to j, what is the maximum profit.

Have job, starting at st, ending at et, profit pt. The previous job with index ind who is cumpatible with current job.

dp[j] = Math.max(dp[ind] + pt, dp[j – 1]).

dp[j – 1] is the maximum profit until the last job. We could to choose to schedule or not schedule current job.

Time Complexity: O(nlogn). n = statTime.length.

Space: O(n).

AC Java:

 1 class Solution {
 2     public int jobScheduling(int[] startTime, int[] endTime, int[] profit) {
 3         int n = startTime.length;
 4         int [][] jobs = new int[n][3];
 5         for(int i = 0; i < n; i++){
 6             jobs[i] = new int[]{startTime[i], endTime[i], profit[i]};
 7         }
 8         
 9         Arrays.sort(jobs, (a, b) -> a[1] - b[1]);
10         TreeMap<Integer, Integer> dp = new TreeMap<>();
11         dp.put(0, 0);
12         for(int [] job : jobs){
13             int cur = dp.get(dp.floorKey(job[0])) + job[2];
14             if(cur > dp.lastEntry().getValue()){
15                 dp.put(job[1], cur);
16             }
17         }
18         
19         return dp.lastEntry().getValue();
20     }
21 }

类似Maximum Length of Pair Chain.

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/275323.html

(0)
上一篇 2022年7月19日 05:55
下一篇 2022年7月19日 05:55

相关推荐

发表回复

登录后才能评论