给定一个包含N个元素(可重复)的数组a [],如果其内容中超过一半等于v,则称其“大部分包含一个v元素”。 给定数组a [],需要设计一个高效的算法(时间为N.log(N),使用分治法),以检查它是否包含多数元素并确定它。请注意,数组元素之间唯一可用的比较操作是相等性(a [i] == a [j]),执行时间为常数。
(提示:在算法中,将数组[]划分为两个子数组a1 []和a2 [],每个子数组大小为a []的一半。如果a []中大多数元素是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[] 中,或者同时存在于两个数组中。