Como lo más evidente era tirar de API yo he escogido otro camino.
Código Javascript
:
Ver originalvar sink = function ( array, i ) {
var n = array.length;
var j = 2*i+1;
var k = j + 1;
var item = array[i];
while( j < n ) {
if( k < n && array[k] < array[j] ) j = k;
if( item > array[j] ) {
array[i] = array[j];
array[j] = item;
}
i = j;
j = 2*i+1;
k = j + 1;
item = array[i];
}
}
Array.prototype.toHeap = function() {
var n = (this.length >> 1) - 1;
for( ; n >= 0; --n ) {
sink( this, n );
}
}
Array.prototype.popMin = function()
{
var n = this.length;
if( n > 0 ) {
this[0] = this[n-1];
this.pop();
sink( this, 0 );
}
}
function tercero( arr ) {
if( arr.length < 3 ) {
return false;
} else {
arr.toHeap();
var n = 1;
do {
var value = arr[0];
arr.popMin();
if( arr[0] != value ) ++n;
} while( n < 3 )
return arr[0];
}
}
var datos = [4,1,7,2];
console.log(tercero(datos));
Edit: vaya que despiste, no me di cuenta del tema de que números repetidos eran considerados como uno solo. Ya está corregido