Sono stato appena intervistato con una domanda e sono curioso di sapere quale dovrebbe essere la risposta. Il problema era essenzialmente:Ricerca ottimale per k valori minimi nell'elenco non ordinato di numeri interi
Supponiamo di avere un elenco non ordinato di n interi. Come trovi i valori minimi di k in questa lista? Cioè, se hai una lista di [10, 11, 24, 12, 13] e stai cercando i 2 valori minimi, otterrai [10, 11].
Ho una soluzione O (n * log (k)), e quella è la cosa migliore, ma sono curioso di ciò che le altre persone escogitano. Mi asterrò dall'inquinare i cervelli della gente pubblicando la mia soluzione e la modificherò tra un po '.
EDIT # 1: per esempio, una funzione simile: getMinVals lista (& l, int k)
EDIT # 2: Sembra che si tratta di un algoritmo di selezione, quindi mi lancio nella mia soluzione anche; iterando sull'elenco e utilizzando una coda di priorità per salvare i valori minimi. La specifica sulla coda di priorità era che i valori massimi sarebbero finiti nella parte superiore della coda di priorità, quindi confrontando la parte superiore a un elemento, la parte superiore sarebbe stata spuntata e l'elemento più piccolo sarebbe stato premuto. Ciò presupponeva che la coda di priorità avesse un push O (log n) e un pop O (1).
Mi ricordo di aver fatto queste domande più di un anno fa e la risposta che ho ottenuto non era migliore di O (n * log (k)), quindi penso che potresti già averlo. – achinda99
Per coincidenza ho dovuto implementarlo sul lavoro proprio ieri. È O (n * log (k)) anche se ci sono un paio di modi diversi per arrivarci. – Crashworks
Sempre bello sapere che non ho fatto il colloquio. Detto questo, le 2-3 soluzioni che ho provato prima probabilmente non mi hanno aiutato molto. –