Tout savoir comment puis-je obtenir la valeur de mode à partir d'un tableau? Par exemple, si j'ai un tableau avec un numéro de différence, comment puis-je utiliser Java pour rechercher quel numéro apparaît le plus?Obtenir la valeur de mode dans Java
Répondre
Se termine en O (n) par opposition à O (n^2). Nécessite des tableaux de longueur> 0.
public static int getMode(int[] values) {
HashMap<Integer,Integer> freqs = new HashMap<Integer,Integer>();
for (int val : values) {
Integer freq = freqs.get(val);
freqs.put(val, (freq == null ? 1 : freq+1));
}
int mode = 0;
int maxFreq = 0;
for (Map.Entry<Integer,Integer> entry : freqs.entrySet()) {
int freq = entry.getValue();
if (freq > maxFreq) {
maxFreq = freq;
mode = entry.getKey();
}
}
return mode;
}
Une base, mais l'algorithme inefficace serait quelque chose comme:
static int modal(int[] values) {
int modal = 0;
int mfreq = 0;
for(int i : values) {
// Is this value the most frequent we've found so far?
int freq = 0;
for(int j : values) {
if(j == i) {
freq++;
}
}
if(freq > mfreq) {
modal = i;
mfreq = freq;
}
return modal;
}
Vous pourriez faire un peu mieux par des fréquences pré-calcul pour chaque valeur et de les stocker, peut-être dans une carte ou similaire, bien que cela nécessitent toujours une boucle de valeurs, et nécessitent toujours une autre boucle pour déterminer qui a la fréquence la plus élevée.
Ceci est un peu là-bas, et je ne sais pas ses performances, mais si vous étiez prêt à essayer un peu Groovy avec votre Java ...
static int modal(ArrayList values) {
use(Collections){
values.max{ values.frequency(it) }
}
}
Ces méthodes/classes Groovy peuvent-elles être utilisées depuis Java? (C'est-à-dire, est-ce que tout ce qui est nécessaire est la bibliothèque d'exécution de Groovy ou y a-t-il d'autre magie?) –
vous avez juste besoin de groovy.jar. Cela aide si votre ide supporte groovy aussi (consultez Spring Tool Suite et/ou le plugin Groovy eclipse). Voici un exemple utilisant netbeans: http://netbeans.org/kb/docs/java/groovy-quickstart.html#groovy –
- 1. Obtenir la valeur entière de l'année en cours en Java
- 2. Obtenir la valeur de NSTextField
- 3. SQL: Obtenir la valeur à l'index dans la valeur binaire
- 4. obtenir la valeur de iframe
- 5. Obtenir de la valeur VAR
- 6. Obtenir la valeur d'édition de ListView
- 7. Obtenir la clé de la valeur dans la collection .Net
- 8. Obtenir la valeur de chaîne dans la classe de chaîne
- 9. obtenir la dernière valeur dans le tableau
- 10. obtenir la valeur parent dans Flex
- 11. "Détient la valeur de la propriété" dans le code Java
- 12. comment obtenir la valeur de la cellule dans l'iphone?
- 13. comment obtenir la valeur de l'élément vérifié dans la boucle
- 14. obtenir la valeur de l'autre colonne en dehors de la colonne de valeur dans Infragistics ultracombo
- 15. Obtenir la valeur de retour de processus
- 16. Comment obtenir la valeur de l'éditeur WMD?
- 17. valeur Obtenir la base de données relationed
- 18. Android: obtenir la valeur la plus élevée dans la colonne
- 19. Comment obtenir la valeur numérique de Enum?
- 20. Comment obtenir la valeur de MemberInfo?
- 21. Obtenir la valeur de clé étrangère
- 22. Comment obtenir de la valeur avec UIDatePicker?
- 23. Java- vérification de la valeur dans un tableau multidimensionnel
- 24. Comment obtenir la valeur de retour d'une fonction dans windbg?
- 25. Comment obtenir la valeur de <PasswordBox dans Silverlight?
- 26. Comment obtenir asp.net Valeur de session dans la méthode jquery?
- 27. Comment obtenir la valeur de l'élément dans jQuery
- 28. Obtenir la valeur de Row dans Datatable C#
- 29. Comment obtenir la valeur de Request.QueryString dans vb.net
- 30. Obtenir de la valeur sans créer d'objet dans struts2
Vous pouvez utiliser des valeurs AtomicInteger au lieu de Integer pour réduire le nombre d'affectations d'objets si le nombre est supérieur à 128. –
J'aime cette approche du mode de détermination. La solution est actuellement dans freqs.put (val, (freq == null? 1: freq + 1)); Merci ... –