Говорят, что массив a [], содержащий N элементов, допускающих повторение, «содержат в основном элементы av», если более половины его содержимого равно v. Учитывая массив a [], он предназначен для построения эффективного алгоритма (в то время как N.log(N) и используя принцип «разделяй и властвуй»), чтобы проверить, содержит ли он элемент большинства, и определить его. Рассмотрим единственную доступную операцию сравнения между элементами массива, это равенство (a[i] == a[j]), выполняемую за константное время. (Подсказка: в алгоритме разделите массив на [] на два подмассива a1 [] и a2 [], каждый из которых имеет половину размера []. Если элемент в большей части [] равен v, то v должен быть также элемент в большинстве a1 [], или a2 [] или обоих).
int main() {
int a[12] = {5, 9, 3, 13, 5, 21, 5, 7, 17, 12, 5, 6};
int N = 12, lo = 0, hi = N - 1, mid,i,j;
mid = lo + (hi - lo) / 2;
int n1 = mid - lo + 1;
int n2 = hi - mid;
int a1[n1],a2[n2];
/* Copy data to temp arrays a1[] and a2[] */
for (i = 0; i < n1; i++)
a1[i] = a[lo + i];
for (j = 0; j < n2; j++)
a2[j] = a[mid+1+j];
while (i < n1 && j < n2) {
if(a1[i]==a2[j]){
}else if(){
}else{
}
}
return 0;
}
У меня возникли проблемы с тем, как я должен продолжить, используя операцию равенства, сравнивая вспомогательные массивы, чтобы увидеть, находится ли самый элемент на a1 [] или a2 [] или на обоих!
a1[]
это не обязательно должно быть большинство вa[]
. - person JimmyB   schedule 02.02.2018