Mittel 0 gelöst 0% Erfolgsquote

K-th Smallest Element

Find the k-th smallest value without fully sorting.

Das lernst du

  • Werte um ein Pivot partitionieren
  • Nur in eine Seite rekursiv absteigen
  • Das k-kleinste Element in durchschnittlich linearer Zeit finden

Problem

Return the k-th smallest value of the list (k counts from 1). Quickselect finds it in average O(n) time without sorting everything.

Implement kth_smallest(numbers, k).

Input

numbers: The list of integers. k: Which smallest value to return, starting at 1.

Output

Return the k-th smallest value.

Einschränkungen

1 ≤ k ≤ length ≤ 200,000

Beispiele

Beispiel 1
Eingabe:
k = 3
numbers = [7, 10, 4, 3, 20, 15]

Erwartete Ausgabe:
expected = 7
Eingabe:
long long k = 3;
std::vector<long long> numbers = {7, 10, 4, 3, 20, 15};

Erwartete Ausgabe:
long long expected = 7;
Eingabe:
long k = 3;
long[] numbers = new long[] {7, 10, 4, 3, 20, 15};

Erwartete Ausgabe:
long expected = 7;

Erläuterung

Sorted: 3, 4, 7, 10, 15, 20; the 3rd smallest is 7.

Beispiel 2
Eingabe:
k = 2
numbers = [5, 5, 1]

Erwartete Ausgabe:
expected = 5
Eingabe:
long long k = 2;
std::vector<long long> numbers = {5, 5, 1};

Erwartete Ausgabe:
long long expected = 5;
Eingabe:
long k = 2;
long[] numbers = new long[] {5, 5, 1};

Erwartete Ausgabe:
long expected = 5;

Erläuterung

Sorted: 1, 5, 5; the 2nd smallest is 5 (duplicates count).

So gehst du vor

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

Hinweis 1

Du brauchst nur das Element, das nach dem Sortieren an Position k stehen würde, nicht die vollständig sortierte Liste.

Hinweis 2

Partitioniere um einen Pivot und gehe nur rekursiv oder iterativ in die Seite, die den Zielrang noch enthalten kann.

Hinweis 3

Vergiss nicht, dass k einsbasiert ist, und Duplikate trotzdem als eigene Positionen zählen.

Erwartete Komplexität

O(n) average time, O(1) 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.