Schwierig 0 gelöst 0% Erfolgsquote

Maximum Project Rewards

Choose nonoverlapping projects to earn the largest total reward.

Das lernst du

  • Sort intervals by end time
  • Find the last compatible project with binary search
  • Choose between taking and skipping a project

Problem

Übersetzung anzeigen

Each project is [start_day, end_day, reward]. It occupies every day from start_day through end_day, including both endpoints. You can participate in only one project on a day. Choose a subset with the largest total reward. A project starting on another project’s end day conflicts with it.

Implement project_rewards(projects).

Input

projects: Rows of three integers: start day, end day, and reward.

Output

Return the maximum total reward; the chosen projects need not be returned.

Einschränkungen

1 ≤ projects ≤ 200,000. 1 ≤ start_day ≤ end_day ≤ 1,000,000,000. Rewards are positive integers at most 1,000,000,000.

Beispiele

Beispiel 1
Eingabe:
projects = [
    [1, 2, 4],
    [3, 4, 5],
    [2, 3, 10]
]

Erwartete Ausgabe:
expected = 10
Eingabe:
std::vector<std::vector<long long>> projects = {
    {1, 2, 4},
    {3, 4, 5},
    {2, 3, 10}
};

Erwartete Ausgabe:
long long expected = 10;
Eingabe:
long[][] projects = new long[][] {
    new long[] {1, 2, 4},
    new long[] {3, 4, 5},
    new long[] {2, 3, 10}
};

Erwartete Ausgabe:
long expected = 10;

Erläuterung

The first two projects earn 9 together. The last earns 10 and conflicts with both, so choose it alone.

Beispiel 2
Eingabe:
projects = [
    [1, 2, 4],
    [2, 3, 5]
]

Erwartete Ausgabe:
expected = 5
Eingabe:
std::vector<std::vector<long long>> projects = {
    {1, 2, 4},
    {2, 3, 5}
};

Erwartete Ausgabe:
long long expected = 5;
Eingabe:
long[][] projects = new long[][] {
    new long[] {1, 2, 4},
    new long[] {2, 3, 5}
};

Erwartete Ausgabe:
long expected = 5;

Erläuterung

Both occupy day 2. Choose only the second, with reward 5.

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

This is a weighted interval scheduling problem with overlapping time ranges.

Hinweis 2

Sort projects by end day and combine each project with the latest compatible earlier one.

Hinweis 3

Be precise about conflicts: another project starting on an end day still overlaps.

Erwartete Komplexität

O(n log n) time, O(n) extra space

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.