【题目描述】
有一组数,很多很多个数,里面有一个数出现了超过一半次,请你把它找出来.
int find_over_half(int d[], int n)
{
int i, sum = 0, t;
for (i = 0; i < n; ++i) {
if (sum == 0) {
t = d[i];
sum = 1;
} else {
if (d[i] == t) ++sum;
else --sum;
}
}
return t;
}
SOJ-3862是一个变形,问大于或等于一般次数的那个数,运用随机化的思想
int find_over_or_equal_half(int d[], int n)
{
int x, i;
while (1) {
x = rand() % n;
int sum = 0;
for (i = 0; i < n; ++i) {
if (d[i] == d[x])
++sum;
}
if (sum >= n / 2) return x;
}
}