مساله:
آرایه ای از اعداد داریم که در آن تمام اعداد به جز یکی با هم برابر است. سعی کنید آنرا پیدا کنید.
Kata.findUniq(new double[]{ 1, 1, 1, 2, 1, 1 }); // => 2 Kata.findUniq(new double[]{ 0, 0, 0.55, 0, 0 }); // => 0.55
ما تضمین می کنیم که آرایه حداقل ۳ عدد داشته باشد.
در تست ها آرایه ها بسیار بزرگ هستند پس به عملکرد تابع دقت کنید.
Description:
There is an array with some numbers. All numbers are equal except for one. Try to find it!
Kata.findUniq(new double[]{ 1, 1, 1, 2, 1, 1 }); // => 2 Kata.findUniq(new double[]{ 0, 0, 0.55, 0, 0 }); // => 0.55
It’s guaranteed that array contains at least 3 numbers.
The tests contain some very huge arrays, so think about performance.
import java.util.Arrays; public class Kata { public static double findUniq(double[] arr) { Arrays.parallelSort(arr); if (arr[0] != arr[1]) return arr[0]; return arr[arr.length - 1]; } }
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]; } }
public class Kata { public static double findUniq(double arr[]) { final double x = arr[arr[0] == arr[1] ? 0 : 2]; for (double y : arr) if (y != x) return y; throw new RuntimeException("no unique number found"); } }
import java.util.Arrays; import java.util.Map.Entry; import static java.util.function.Function.identity; import static java.util.stream.Collectors.counting; import static java.util.stream.Collectors.groupingBy; class Kata { static double findUniq(final double[] array) { return Arrays.stream(array).boxed() .collect(groupingBy(identity(), counting())) .entrySet().stream() .filter(e -> e.getValue() == 1) .findFirst() .map(Entry::getKey) .orElse(0.0); } }
import java.util.*; // Make sure your class is public public class Kata { public static double findUniq(double arr[]) { HashMap<Double, Integer> doubleMap = new HashMap<Double, Integer>(); //Put all array element in a hashmap for (double i : arr) { if (doubleMap.get(i) == null) { doubleMap.put(i, 1); continue; } doubleMap.put(i, doubleMap.get(i) + 1); } //Find the matching element for (Map.Entry<Double, Integer> i : doubleMap.entrySet()) { if (i.getValue() == 1) return i.getKey(); } throw new RuntimeException("no unique number found"); } }