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 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
.
Example 1:
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:
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:
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.
标签:1235,int,Profit,Maximum,profit,job,startTime,endTime,dp 来源: https://www.cnblogs.com/Dylan-Java-NYC/p/16492600.html