Nehmen wir an, wir haben zwei Arrays A [] und B []. Jedes Array enthält n verschiedene ganze Zahlen, die nicht sortiert sind. Wir müssen das k-te Element in der Vereinigung der zwei Arrays auf die effizienteste Weise finden, die möglich ist. (Bitte nicht Beitrag Antworten über die Arrays verschmelzenden ordnen und sortiert dann KTH-Index in der fusionierten Array zurück)K-Rang-Element unter 2 unsortierten Arrays
Antwort
Sie die selection algorithm verwenden können das K-te Element zu finden, in O (N) Zeit, wobei N die Summe der Größen der Arrays. Offensichtlich behandeln Sie die beiden Arrays als ein einzelnes großes Array.
Ich kenne diese Methode, aber ich brauche eine bessere Komplexität – user3600483
Es gibt keine bessere Komplexität als O (N), um das Kth-Objekt in unsortierter Liste zu finden. –
Vereinigung von Arrays kann in linearer Zeit erfolgen. Ich überspringe diesen Teil.
Sie können den partition
() Algorithmus verwenden, der in quick sort
verwendet wird. Bei der schnellen Sortierung muss die Funktion zwei Zweige rekursiv anzeigen. Hier rufen wir jedoch nur den rekursiven Aufruf und damit nur die 1-verzweigte Rekursion bedingt auf.
Hauptkonzept: partition
() den gewählten PIVOT
Element an seinem entsprechenden sortiert Position. Daher können wir diese Eigenschaft verwenden, um die Hälfte des Arrays auszuwählen, an der wir interessiert sind, und nur auf diese Hälfte zurückgreifen. Dies verhindert, dass wir das gesamte Array sortieren können.
Ich habe den folgenden Code basierend auf dem oben genannten Konzept geschrieben. Annahme-Rang = 0 impliziert das kleinste Element in dem Array.
void swap (int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int partition (int a[], int start, int end)
{
/* choose a fixed pivot for now */
int pivot = a[end];
int i = start, j;
for (j = start; j <= end-1; j++) {
if (a[j] < pivot) {
swap (&a[i], &a[j]);
i++;
}
}
/* Now swap the ith element with the pivot */
swap (&a[i], &a[end]);
return i;
}
int find_k_rank (int a[], int start, int end, int k)
{
int x = partition (a, start, end);
if (x == k) {
return a[x];
} else if (k < x) {
return find_k_rank (a, start, x-1, k);
} else {
return find_k_rank (a, x+1, end, k);
}
}
int main()
{
int a[] = {10,2,7,4,8,3,1,5,9,6};
int N = 10;
int rank = 3;
printf ("%d\n", find_k_rank (a, 0, N-1, rank));
}
- 1. Wie kann ich Werte in zwei unsortierten int Arrays vergleichen?
- 2. Finde gemeinsame Elemente in zwei unsortierten Array
- 3. Mehrere Arrays unter gewissen Logik
- 4. PHP: Merge 2 Arrays
- 5. Merge diesen 2-Arrays
- 6. Test 2 Boolesche Arrays
- 7. Kombiniere 2 PHP-Arrays?
- 8. Vergleich 2 numpy Arrays
- 9. Müssen 2 Arrays gleichzeitig in JSTL durchlaufen
- 10. Merge 2 Arrays LINQ mit
- 11. Join 2 Arrays von Schlüssel
- 12. PHP: Merge 2 Multidimensional Arrays
- 13. Assertion testen 2 Arrays deepEqual
- 14. Perl - Zeilen eines Arrays unter Bedingungen entfernen
- 15. Entfernen Sie doppeltes Maximum und Minimum von unsortierten Array
- 16. Echo 2 Arrays zu 1 Tabelle
- 17. BeautifulSoup erhalten href aus unsortierten Liste
- 18. Intersektierende Matplotlib-Grafik mit unsortierten Daten
- 19. So finden Sie in unsortierten Array am nächsten Doppel
- 20. C# riesige Größe 2-dim-Arrays
- 21. Leistung von 2-dimensionalen Arrays vs 1-dimensionalen Arrays
- 22. 2 Entwickler unter 1 xcode
- 23. Vergleich 2 unsortierten Listen in Linux, die einzigartig in der zweiten Datei Listing
- 24. Größte unter zehn Zahlen mit Arrays
- 25. Wie kann ich die Schlüssel eines unsortierten Arrays zu dem ändern, was sie wären, wenn das Array sortiert wäre?
- 26. Passing C-Arrays verschiedener Größen zu Vorlagenfunktion unter 2 identische Parameter
- 27. Vergleiche 2 Arrays, die den Unterschied zurückgeben
- 28. Python win32com und 2-dimensionale Arrays
- 29. Median von 2 sortierten Arrays unterschiedlicher Länge
- 30. passend zu 2 multidimensionalen Arrays Vergleich
Deutlich in dem Sinne, dass sie einzigartig sind, zum Beispiel A [8 3 2 4 12] und B [6 11 1 5 9]. Alle Elemente sind ganze Zahlen kleiner als 10000000 und die Elemente müssen nicht fortlaufend sein. – user3600483
Es war nur ein Beispiel. Wir müssen für einen allgemeinen Fall unsortierter Arrays auflösen. Ich habe den Kommentar aktualisiert, um Verwirrung zu vermeiden. – user3600483