题目:
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
思路:
每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),剩下的ID中,原发帖大于1/4的ID所占比例仍然大于1/4,不断重复这个过程,把ID列表中的ID总数降低。
代码:
#include<iostream> using namespace std; void Find(int ID[], int N, int candidate[]) { int nTimes[] = { 0,0,0 }; for (int i = 0; i<N; i++) { if (ID[i] == candidate[0]) { nTimes[0]++; } else if (ID[i] == candidate[1]) { nTimes[1]++; } else if (ID[i] == candidate[1]) { nTimes[2]++; } else if (nTimes[0] == 0) { nTimes[0] = 1; candidate[0] = ID[i]; } else if (nTimes[1] == 0) { nTimes[1] = 1; candidate[1] = ID[i]; } else if (nTimes[2] == 0) { nTimes[2] = 1; candidate[2] = ID[i]; } else { nTimes[0]--; nTimes[1]--; nTimes[2]--; } } cout<<"三个小水王ID是:"; for (int i = 0; i<3; i++) { cout<<candidate[i]<< " "; } } void main() { int ID[] = { 1,1,1,2,2,2,3,3,3,1,2,3,1,2,3,6 }; int N = 16; int candidate[] = { -1,-1,-1 }; cout<<"发帖ID为:"; for (int i = 0; i<N; i++) { cout<<ID[i]<<" "; } cout << endl; Find(ID, N, candidate); }
运行结果: