2014-04-29 1 views
1
var set = new Array(1, 2, 1, 2, 3, 9, 12, 15); 

Je dois extraire les plus grands nombres de ce type d'ensemble.
Combien de nombres sont extraits n'a pas d'importance
mais ils doivent avoir une différence significative avec ceux qui ne sont pas extraits.Extraire les plus grands nombres d'un tableau

Donc, dans cet ensemble, je devrais obtenir [9, 12, 15]

Je ne sais même pas comment commencer.

+6

Définir la différence significative – thefourtheye

+0

Peut-être les extraits devraient tomber dans la sorte du troisième quartile? Et si l'ensemble ne contient que deux éléments, alors la moitié supérieure. – NestedWeb

+1

Quelle est votre équation pour déterminer cette différence significative? –

Répondre

1

façon Aternative de choisir plus grand nombre:

var set = new Array(1, 2, 1, 2, 3, 9, 12, 15); 

function getHighNums(arr,percentage,fillpercentage){ 
    var perc=0; 
    var sorted=arr.sort(function(a,b){ return a-b}); 
    var total=0; 
    for(var i=0;i<arr.length;i++) total+=arr[i]; 
    for(var j=sorted.length-1;j>=0;j--){ 
     perc+=sorted[j]/total*100; 
     if(fillpercentage){ 
      if(perc > percentage) return sorted.slice(j,sorted.length); 
     }else{ 
      if(sorted[j]/total*100 < percentage) return sorted.slice(j+1,sorted.length); 
     } 
    } 
    return sorted; 

} 

console.log(getHighNums(set, 10, false))//9,12,15 
console.log(getHighNums(set, 50, true))//12,15 

La première ligne obtient tous les nombres qui représentent au moins 10% de la somme de la valeur du tableau. Somme de tableau = 1+2+1+2+3+9+12+15=45 afin qu'il prenne des nombres > 4.5

La deuxième ligne obtient des nombres jusqu'à ce que leur somme soit d'au moins 50% de la somme totale du tableau. Donc, comme la somme du tableau =45, il choisira les nombres les plus élevés jusqu'à ce que leur somme soit > 22.5

4

Si, comme vous semblez l'indiquer dans un commentaire à votre question, vous voulez simplement ceux qui sont supérieurs au troisième quartile, c'est facile.

créer simplement un liste des triés les N numéros et obtenir ceux-dessus de la position d'index 3N/4.

Vous pouvez utiliser Array.sort() pour trier la matrice, Array.length pour obtenir la longueur et Array.slice() pour extraire une partie de la matrice.

Par exemple, le code suivant:

var set = new Array(1, 2, 1, 2, 3, 9, 12, 15); 
document.write(set); 

set.sort(function(a, b){return a-b}); 
document.write('<br>'); 
document.write(set); 

var len = set.length; 
document.write('<br>'); 
document.write(len); 

var topQ = set.slice (3*len/4); 
document.write('<br>'); 
document.write(topQ); 

sort la liste non triés et classés, la longueur, et les 25%:

1,2,1,2,3,9,12,15 
1,1,2,2,3,9,12,15 
8 
12,15 
+0

Yup ce travail oughta .. –

2

Voici votre solution pour max 3 nombre de la valeur max

var set = new Array(1, 2, 1, 2, 3, 9, 12, 15); 


function getmax(index) 
{ return set.sort(function(a,b){return b-a;})[index]; 

} 

var topmax = new Array(
getmax(2),getmax(1),getmax(0) 
) 


console.log(topmax); 

JSBIN Example

ÉDITÉ

var set = new Array(1, 2, 1, 2, 3, 9, 12, 15); 

set.sort(function(a,b){return b-a;}); 



document.write(set[2],set[1],set[0]); 
+0

Cela semble plutôt inefficace, en triant le tableau chaque fois que vous voulez extraire une valeur. Sûrement vous pourriez le trier une fois puis extraire une tranche. – paxdiablo

0

Vous pouvez essayer. (Rechercher la valeur inférieure CV - CV/I, où CV - valeur actuelle, je - un certain coefficient)

Javascript

var data = [1, 2, 1, 2, 3, 9, 12, 15], 
    index = 3, 
    i; 

function getMaximums(data, index){ 
    data = data.sort(function(a, b){return a < b}); 

    for(i = 0; i < data.length; i++){ 
     if(!data[i + 1] || (data[i] - data[i]/index) > data[i + 1]) return data.splice(0, i + 1); 
    } 
} 

console.log(getMaximums(data, index)); 
Questions connexes