Find the Unique, my precious
Cette semaine, c'est Quentin qui vous propose un #KataOfTheWeek : Find the Unique
Briefing du Kata : En vous donnant un tableau composé uniquement de nombres, tous égaux sauf 1. Trouvez-le…
Kata.findUniq(new double[]{ 1, 1, 1, 2, 1, 1 }); // => 2
Kata.findUniq(new double[]{ 0, 0, 0.55, 0, 0 }); // => 0.55
Le tableau contient au moins 3 nombres.
Saurez-vous résoudre le problème ?
Bon courage !
Et voici des solutions proposées par l'auteur en Java :
Une première solution :
import java.util.Arrays;
public class Kata {
public static double findUniq(double[] arr) {
Arrays.sort(arr);
return arr[0] == arr[1] ? arr[arr.length-1]:arr[0];
}
}
Solution plutôt simple, le tableau contenant que 2 nombres différents (en plusieurs exemplaires) en le triant on s'assure que le nombre unique est soit au début soit à la fin du tableau.
Après si vous êtes en train de réviser l'OCP et que vous voulez utiliser les streams, vous pouvez collecter le tableau après l'avoir converti en Double
, une fois converti on peut collecter le stream dans une Map avec un goupingBy :
import java.util.*;
import java.util.stream.Collectors;
import java.util.function.Function;
public class Kata {
public static double findUniq(double arr[]) {
return Arrays.stream(arr)
.boxed()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().stream()
.filter(e-> e.getValue() == 1)
.map(Map.Entry::getKey)
.findFirst()
.get();
}
}
Mais cette solution est moins optimisée.
Votre équipe TakiVeille