#include <stdio.h>
#include <stdlib.h>
typedef struct {
int key;
int value;
} KeyValuePair;
KeyValuePair* create_freqency(int size) {
KeyValuePair* freqency = (KeyValuePair*)malloc(size * sizeof(KeyValuePair));
for (int i = 0; i < size; i++) {
freqency[i].key = 0;
freqency[i].value = 0;
}
return freqency;
}
int find_index(KeyValuePair* freqency, int size, int key) {
for (int i = 0; i < size; i++) {
if (freqency[i].key == key) {
return i;
}
}
return -1;
}
void elements_that_appear_more_than_x_times(int* arr, int size, int k) {
int times = size / k;
KeyValuePair* freqency = create_freqency(size);
int unique_elements = 0;
printf("more than %d times\n", times);
for (int i = 0; i < size; i++) {
int index = find_index(freqency, unique_elements, arr[i]);
if (index != -1) {
freqency[index].value += 1;
} else {
freqency[unique_elements].key = arr[i];
freqency[unique_elements].value = 1;
unique_elements++;
}
}
for (int i = 0; i < unique_elements; i++) {
if (freqency[i].value > times) {
printf("%d\n", freqency[i].key);
}
}
free(freqency);
}
int main() {
int arr[] = {4, 8, 6, 5, 5, 8, 3, 2, 1, 2, 2, 5, 5, 5, 5, 8, 9, 8, 8};
int k = 4;
int size = sizeof(arr) / sizeof(arr[0]);
elements_that_appear_more_than_x_times(arr, size, k);
return 0;
}
/*
run:
more than 4 times
8
5
*/