этот код подсчитывает вхождения заданного числа в массиве (он не очень эффективен, но с этого стоит начать)
public static void main(String[] args) {
int[] repetitive = { 5, 12, 5, 17, 12, 12, 5, 39 };
System.out.println(countOccurences(repetitive));
}
public static Map<Integer, Integer> countOccurences(int[] arr) {
if (arr.length == 1) {
Map<Integer, Integer> result = new HashMap<>();
result.put(arr[0], 1);
return result;
} else {
int to = arr.length / 2;
Arrays.copyOfRange(arr, 0, to);
Map<Integer, Integer> left = countOccurences(Arrays.copyOfRange(arr, 0, to));
Map<Integer, Integer> right = countOccurences(Arrays.copyOfRange(arr, to, arr.length));
return merge(left, right);
}
}
static Map<Integer, Integer> merge(Map<Integer, Integer> left, Map<Integer, Integer> right) {
right.forEach((number, count) -> {
left.compute(number, (num, c) -> c == null ? count : c + count);
});
return left;
}