-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path1235-MaximumProfitInJobScheduling.cs
44 lines (38 loc) · 1.46 KB
/
1235-MaximumProfitInJobScheduling.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//-----------------------------------------------------------------------------
// Runtime: 576ms
// Memory Usage: 50.4 MB
// Link: https://leetcode.com/submissions/detail/375087069/
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
namespace LeetCode
{
public class _1235_MaximumProfitInJobScheduling
{
public int JobScheduling(int[] startTime, int[] endTime, int[] profit)
{
var pairs = new (int start, int end, int profit)[profit.Length];
for (int i = 0; i < profit.Length; i++)
pairs[i] = (startTime[i], endTime[i], profit[i]);
Array.Sort(pairs, (a, b) => a.end.CompareTo(b.end));
var dpEndTime = new List<int>();
var dpProfit = new List<int>();
dpEndTime.Add(0);
dpProfit.Add(0);
foreach (var pair in pairs)
{
var prevIndex = Array.BinarySearch(dpEndTime.ToArray(), pair.start + 1);
if (prevIndex < -1)
prevIndex = ~prevIndex;
prevIndex--;
var currentProfit = dpProfit[prevIndex] + pair.profit;
if (currentProfit > dpProfit[dpProfit.Count - 1])
{
dpProfit.Add(currentProfit);
dpEndTime.Add(pair.end); ;
}
}
return dpProfit[dpProfit.Count - 1];
}
}
}