Quelle est la meilleure façon d'obtenir le Kth plus grand élément dans un DoubleStream en java?Comment obtenir Kth plus grand élément d'un DoubleStream en Java
Je sais que nous pouvons faire .max(). GetDouble() pour obtenir l'élément le plus grand.
Quelle est la meilleure façon d'obtenir le Kth plus grand élément dans un DoubleStream en java?Comment obtenir Kth plus grand élément d'un DoubleStream en Java
Je sais que nous pouvons faire .max(). GetDouble() pour obtenir l'élément le plus grand.
doubleStream.boxed()
.sorted(Comparator.reverseOrder())
.skip(k - 1)
.findFirst()
.orElse(null);
vous donnera la k e élément le plus grand, ou null
s'il y a moins de k éléments dans le flux.
Triez le flux, transformez-le en tableau et récupérez l'élément sur array.length-k.
Exemple:
private static double getKth(DoubleStream ds, int k) {
double[] array = ds
.sorted()
.toArray();
return array[array.length-k];
}
Vous devez ajouter la validation pour vous assurer que k
a une valeur légitime
Une fois que vous avez DoubleStream
, faire sorted()
dans l'ordre inverse (DESC). Puis limit(k)
et trier ASC et prendre le first
.
.boxed()
.distinct() //in case you want to ignore repeating values
.sorted(Comparator.reverseOrder())
.limit(k)
.sorted()
.findFirst());
Il retournera le k-ème élément le plus petit au lieu du plus grand. – ZhekaKozlov
si la liste a des doublons jusqu'au nième nombre supposons que nous voulons trouver le 2ème plus grand et le tableau est 2,1,6,6 en triant il donnera 6,6,2,1 et le 2ème donnera 6 mais ce n'est pas vrai –
@xenteros Vous limitez 'k' les plus petits éléments – ZhekaKozlov
OptionalDouble kthLargest = stream
.map(i -> -i) // Trick to sort in reverse order
.sorted()
.distinct() // Remove duplicates
.map(i -> -i)
.skip(k - 1)
.findFirst();
@Holger Stream peut contenir moins de 'k' éléments – ZhekaKozlov
@Holger cette solution améliorerait-elle plus rapidement/plus de mémoire efficace que d'utiliser un flux encadré pour trier décroissant (qui pourrait être plus facile à lire)? –
@Malte Hartwig: cela dépend de la taille du flux et de l'implémentation. AFAIK, en utilisant 'distinct()' avec l'implémentation actuelle, vous avez quand même la surcharge de boxe. Mais si vous avez vraiment besoin de cette opération pour être efficace, vous ne devriez utiliser ni l'un ni l'autre, mais plutôt faire quelque chose [comme ceci] (https://stackoverflow.com/q/5380568/2711488); c'est pareil pour les k éléments les plus petits ou les plus grands. – Holger
Avez-vous essayé de le chercher? Il y a beaucoup de questions traitant de trouver le k-ème élément le plus important dans diverses structures de données. – Henry
[Aucun code] (http://idownvotedbecau.se/nocode) et [aucune tentative] (http://idownvotedbecau.se/noattempt), veuillez consulter [ask]. – Alex
Copie possible de [Comment trouver le kième élément le plus grand dans un tableau non trié de longueur n dans O (n)?] (Https://stackoverflow.com/questions/251781/how-to-find-the-kth-largest -element-in-an-unsorted-array-of-length-n-in-on) – geocar