LintCode 3209: Typische Fragen zum Umzug von Obsthaufen

3209 · Verschieben von Früchten
C++
Medium

Bei diesem Thema handelt es sich um ein Vorab-Release-Thema. Wenn Sie auf Probleme stoßen, kontaktieren Sie uns bitte über „Problembehebung“. Als Dankeschön werden wir Ihr Konto auf VIP hochstufen.
Beschreibung
Xiao Ming kam in den Obstgarten, um Früchte zu pflücken, und als er mit dem Pflücken fertig war, wurden die Früchte in mehrere Stapel aufgeteilt.
Nun möchte Xiao Ming diese Früchte zu einem Haufen zusammenfassen. Bitte entwerfen Sie einen Algorithmus, damit Xiao Ming die geringste Menge an Energie verbraucht, um die Früchte zu tragen.

Notiz:

Um 1 Frucht zu tragen, wird 1 Energiepunkt benötigt.
Es können jeweils nur zwei Obsthaufen kombiniert werden.
Beispiel:
Wenn Sie 1 3 8 Obsthaufen bewegen möchten, ist dies der energieeffizienteste Weg.

Zuerst 1 3 zusammen bewegen, 4 Punkte verbrauchen, und jetzt wird die Frucht zu zwei Stapeln von 4 8.
Dann 4 8 zusammen bewegen, 12 Energiepunkte verbrauchen, und jetzt besteht die Frucht nur aus 12 Stapeln.
Insgesamt werden 4 + 12 von 16 Punkten verbraucht.
Diese Funktion.

Empfängt einen Vektorcontainer „Früchte“, der geformte Daten speichert, die angeben, wie viele Früchte sich nacheinander in jedem Stapel befinden.
Gibt eine Ganzzahl zurück, die die Gesamtenergiemenge angibt, die erforderlich ist, um die Pfähle zusammen zu tragen.
Für diese Frage müssen Sie den Code in der Funktion „carry“ in der Datei „Solution.cpp“ vervollständigen.
Der Evaluator führt main.cpp aus, um die Carry-Funktion in Soluction.cpp aufzurufen, indem er eine benutzerdefinierte Funktionsbibliothek importiert und Ihren Rückgabewert abruft, um die Richtigkeit des Ergebnisses zu bestimmen.

Das Thema garantiert, dass der Endwert der verbrauchten Ausdauer für die angegebenen Daten innerhalb des Datenbereichs von int liegt.

Nutzen Sie die automatische Sortierfunktion des Sammelbehälters in der Bibliothek, um das Problem zu lösen.
Doppelte Elemente können sowohl in Daten- als auch in Zusammenführungsprozessen auftreten.
Beispieleingabe Beispiel
1:

[2,2,3,3,6]
Ausgabebeispiel 1:

36
Die müheloseste Art zu tragen ist.
2 + 2 = 4 -> 4,3,3,6
3 + 3 = 6 -> 4,6,6
4 + 6 = 10 -> 10,6
6 + 10 = 16 -> 16
4 + 6 + 10 + 16 = 36

Eingabebeispiel 2:

[]
Ausgabebeispiel 2:

0
Es gibt keine Früchte zum Tragen, daher beträgt der Ausdauerverbrauch 0.

Lösung 1:

#include <queue>
/**
 * @param fruits: An arryy
 * @return: An integer
 */
int carry(vector<int> &fruits) {
    
    
    int len = fruits.size();
    if (len == 0) return 0;
    if (len == 1) return fruits[0];
    int sum = 0;
    priority_queue<int, vector<int>, greater<int>> minHeap(fruits.begin(), fruits.end());
    
    while (minHeap.size() > 1) {
    
    
        int min1 = minHeap.top();
        minHeap.pop();
        int min2 = minHeap.top();
        minHeap.pop();
        sum += min1 + min2;
        minHeap.push(min1 + min2);
    }
    return sum;
}

Je suppose que tu aimes

Origine blog.csdn.net/roufoo/article/details/127644832
conseillé
Classement