Ver Mensaje Individual
  #61 (permalink)  
Antiguo 22/12/2013, 11:22
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Respuesta: Propuesta para desafíos javascript 2014

Hola,

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
  1. function tercero(a) {
  2.     var m1 = 0;
  3.     var m2 = 1;
  4.     var m3 = 2;
  5.     for (var i = 2; i < a.length; i++) {
  6.         if (a[i] === a[m1] || a[i] === a[m2] || a[i] === a[m3]) {
  7.             continue;
  8.         }
  9.         if (a[i] < a[m1] || a[i] < a[m2] || a[i] < a[m3]) {
  10.             if (a[m3] > a[m2] && a[m3] > a[m1]) {
  11.                 m3 = i;
  12.             } else {
  13.                 if (a[m2] > a[m1]) {
  14.                     m2 = i;
  15.                 } else {
  16.                     m1 = i;
  17.                 }
  18.             }
  19.         }
  20.     }
  21.     if (a.length > 2) {
  22.         if (a[m3] > a[m2] && a[m3] > a[m1]) {
  23.             return a[m3];
  24.         } else {
  25.             if (a[m2] > a[m1]) {
  26.                 return a[m2];
  27.             } else {
  28.                 return a[m1];
  29.             }
  30.         }
  31.     }
  32.     return false;
  33. }
  34.  
  35. var a = [4,3,2,4,-245,4,1,5,-124,-245,-308];
  36. 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,