【编程之美】寻找发帖水王+SOJ-2399+SOJ-2861+SOJ-2862

【题目描述】

有一组数,很多很多个数,里面有一个数出现了超过一半次,请你把它找出来.

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;
    }
}


你可能感兴趣的:(编程)