BOP - 寻找发贴‘水王’

寻找发贴‘水王’中扩展题为:

       随着Tango的发展,管理员发现,“超级水王”没有了。统计结果表明,有3个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/4。你能从发帖ID列表中快速找出他们的ID吗?

 

解答:这道题显然还是用原题中的思路去解决,但问题复杂了,由原来的一个水王,变成了3个:

首先,我们需要3个变量来记录当前遍历过的3个不同的ID,number1,number2,number3,这3个元素分别对应当前遍历过的3个ID出现的个数。如果遍历中有某个ID不同于这3个当前ID,我们就判断当前3个ID是否有某个的number为0,如果有,那这个新遍历的ID就取而代之,并设置对应的number为1;如果当前3个ID的number皆不为0,则3个ID的number都减去1。

 

void find_top3_water_king(int arr[], int arrSize)

{
            int number1 = 0, number2 = 0, number3 = 0; 
            int waterk1 = 0, waterk2 = 0, waterk3 = 0; /* they are different between each other */

            for (int index = 0; index < arrSize; ++index)
            {
                        if (number3 == 0)
                        {
                                    waterk3 = arr[index];
                                    ++number3;
                                    continue;
                        }
                        else if (number2 == 0 && arr[index] != waterk3 )
                        {
                                    waterk2 = arr[index];
                                    ++number2;
                                    continue;
                        }
                        else if (number1 == 0 && arr[index] != waterk3 && arr[index] != waterk2 )
                        {
                                    waterk1 = arr[index];
                                    ++number1;
                                    continue;
                        }
                        else
                        {
                                    if (arr[index] == waterk1)
                                                ++number1;
                                    else if (arr[index] == waterk2)
                                                ++number2;
                                    else if (arr[index] == waterk3)
                                                ++number3;
                                    else
                                    {
                                                --number1;
                                                --number2;
                                                --number3;
                                    }
                        }                        
            }
            cout << "The big 3 water king is " << waterk1 << "," << waterk2 << "," << waterk3 << endl; 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值