在论坛中寻找发帖数超过一半的ID(确实存在这样的ID)
如果你有一个当前论坛上的所有帖子(包括回帖)的列表,其中帖子作者的ID也在其中,你能快速找出发帖数超过一半的ID(成为“水王”)吗?
解法:
如果每次删除两个不同的ID(不管是否包含“水王”的ID),那么,在剩下的ID列表中,“水王”ID出现的次数仍然超过剩余总数的一半,可以通过
不断地重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得出答案。
代码如下:
#include<iostream>using namespace std;const int N=22;int *find(int *ID,int N);int main(){int ID[N];int i;for(i=0;i<N;i++)cin>>ID[i];int *candidate=find(ID,N);for(i=0;i<3;i++)cout<<candidate[i]<<" ";cout<<endl;delete []candidate;return 0;}int *find(int *ID,int N){int *candidate=new int[3];int nTimes[3]={0};int i,j,k;for(j=0;j<3;j++)candidate[j]=0;for(i=0;i<N;i++){for(j=0;j<3;j++){if(candidate[j]==ID[i]){nTimes[j]++;break;}}if(j==3){for(k=0;k<3;k++){if(nTimes[k]==0){candidate[k]=ID[i];nTimes[k]++;break;}}if(k==3){nTimes[0]--;nTimes[1]--;nTimes[2]--;}}}return candidate;