水王2

一、题目

随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?

 

二、设计思路

这回的题目与上回很相似,我想能不能依旧使用相消的方法。最后,我发现如果一次消去四项完全不同的ID,最后剩下的必定是三个水王的ID.

 

三、代码

#include<iostream.h>

int main()

{

    int ID[10]={1,2,2,2,3,3,3,4,4,4};

    int ID_NULL;

    int shui[3];

    int flag[3];

    int i;

    shui[0]=shui[1]=shui[2]=0;

    flag[0]=flag[1]=flag[2]=ID_NULL;

    for(i=0;i<10;i++)

    {

        if(ID[i]==flag[0])

        {

             shui[0]++;

        }

        else if(ID[i]==flag[1])

        {

             shui[1]++;

        }

        else if(ID[i]==flag[2])

        {

             shui[2]++;

        }

        else if(shui[0]==0)

        {

             shui[0]=1;

             flag[0]=ID[i];

        }

        else if(shui[1]==0)

        {

             shui[1]=1;

             flag[1]=ID[i];

        }

        else if(shui[2]==0)

        {

             shui[2]=1;

             flag[2]=ID[i];

        }

        else

        {

             shui[0]--;

             shui[1]--;

             shui[2]--;

         }

    }

    cout<<"水王有:"<<endl;

    cout<<flag[0]<<"  "<<flag[1]<<"  "<<flag[2]<<endl;

    return 0;

}

四、截图

 

五、总结

这道题如果通过排序,那么1/4,2/4,3/4处即为水王ID,代码简单,但时间复杂度O(n*logn),会加大计算机的运算时间。

代码优化任重而道远。

原文地址:https://www.cnblogs.com/lsfh/p/4469028.html