Nu är jag rätt säker på att uppgiften går ut på att faktiskt lösa det hela med "egen" kod. Ska man ge sig på en mer generell lösning är fortfarande sortering av hela indata en dålig lösning då det i bästa fall är O(N*log(N)) vilket är helt onödigt. En precis lika enkelt lösning som kan ta ut de M första talen ur en serie på N element i valfri ordning är att ordna indata som en binärheap O(N) och sedan plocka ur de M första elementen.
I.e. detta har samma tidskomplexitet som att manuellt gå igenom indata och hela tiden spara de två högsta man sett, vilket är den lösning som föreslagits i denna tråd och nog är det TS bör lägga tid på att fullt förstå. Eller för att vara helt korrekt, det är samma tidskomplexitet så länge som M är väsenligt mycket mindre än N. Om man läser ut majoriteten av elementen så konvergerar tidskomplexiteten på denna lösning mot att sortera alla element m.h.a. heap-sort vilket då ger O(N*log(N)).
Via Javas standardbibliotek kan man väldigt enkelt gör en lösning som bygger på en binär-heap via java.util.PriorityQueue.
Exemplet som vajjan länkar till är precis lösningen att sortera hela indata. LINQ är definitivt en totalt cool finess, men det har ett rykte om sig att vara långsamt. LINQ är inte speciellt långsamt, men folk tendera att använda det på sätt som gör långt mer beräkningar än vad som strikt är nödvändigt vilket i många fall spelar liten roll men totalt sänker prestanda när datamängden inte längre är trivialt liten. Har man en serie av LINQ kommandon kommer man även generera en hel del temporära objekt som kommer gör att GCn för en hel del att jobba med, vilket då också sänker skalbarhet över många CPU-kärnor...