Il problema è risolverlo in n + logn-2 (base 2) no di confronti.
Il mio algoritmo richiede un po 'di spazio in più (O (n * n)). Come posso ridurre questo spazio extra senza aumentare la complessità.
comparisionarray=[][] (2D array )
//a function to find the largest.
findlargest(a,b)
if(len(a)==1 and len(b)==1)
append b to array at ath index in comparisonarray.
append b to array at bth index comparisionarray.
return max(a,b)
else
return max(findlargest(1stHalfof(a),2ndHalfof(a)),findlargest(1stHalfof(b),2ndHalfof(b))
input= input_array()
largest=findlargest(1stHalfof(input),2ndHalfof(input))
subarray=[array at index largest in comparisionarray]
2ndlargest=findlargest(1stHalfof(subarray),2ndHalfof(subarray))
print(2ndlargest)
Modifica: può essere eseguito con confronti minimi n + logn-2 . Questa è l'unica condizione. Questa risposta su math.stackexchange.com lo dimostra. È stato generalizzato per l'ennesimo elemento più grande
Sembra che ci sia una soluzione a questo link StackOverflow . Ma non sono sicuro dello spazio extra e della complessità temporale.