Una solución al primer reto, lineal, en el peor de los casos tendría que ser más eficiente que cualquier ordenamiento puesto que no ordena todo el Array. No intercambia ningún valor de posición, solamente asigna los indices correspondientes.
Código Javascript:
Ver original
function tercero(a) { var m1 = 0; var m2 = 1; var m3 = 2; for (var i = 2; i < a.length; i++) { if (a[i] === a[m1] || a[i] === a[m2] || a[i] === a[m3]) { continue; } if (a[i] < a[m1] || a[i] < a[m2] || a[i] < a[m3]) { if (a[m3] > a[m2] && a[m3] > a[m1]) { m3 = i; } else { if (a[m2] > a[m1]) { m2 = i; } else { m1 = i; } } } } if (a.length > 2) { if (a[m3] > a[m2] && a[m3] > a[m1]) { return a[m3]; } else { if (a[m2] > a[m1]) { return a[m2]; } else { return a[m1]; } } } return false; } var a = [4,3,2,4,-245,4,1,5,-124,-245,-308]; console.log("valor : " + tercero(a));
Se puede implementar de esa forma porque es el 3 valor, escalar al 10 valor sería bastante mas complicado, y sería mas fácil ordenar,
Saludos,