zoukankan      html  css  js  c++  java
  • 寻找水王2

    如题:

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

    通过上网和查找资料,我找到了一种算法思想,复杂度最小,即:

    如果每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4。可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案。

    通过理解和加以修改,我的代码如下:

    #include<iostream>
    using namespace std;
    
    void main()
    {
        int array1[11]={1,1,1,2,2,2,3,3,3,4,4};//假设其为id数组
        int i;
        int cand=0,cand1=0,cand2=0;
        int n=0,n1=0,n2=0;
        for(i=0;i<11;i++)        //寻找水王
        {
            if(array1[i]==cand)  //比较1是否相同
            {
                 n++;
            }
            else if(array1[i]==cand1)//同一类似
            {
                 n1++;
            }
            else if(array1[i]==cand2)//同一类似
            {
                n2++;
            }
            else if(n==0)
            {
                 n=1;
                 cand=array1[i];
            }
            else if(n1==0)
            {
                  n1=1;
                 cand1=array1[i];
            }
            else if(n2==0)
            {
                 n2=1;
                 cand2=array1[i];
            }
            else             
            {                        //删除不同的数组
                 n--;
                 n1--;
                 n2--;
             }
        }
        cout<<"水王是:"<<cand<<" "<<cand1<<" "<<cand2<<endl; 
    }
        

    总结:这不相同抵消的办法太妙了,极大地减少了时间复杂度。我自己做的时候没想出来,还是在同学的同学的提醒和上网查找资料的时候才领悟到的。以后的学习还是要多思考才行。

    遇到的问题:总的来说,这次实验没有太大的问题。

  • 相关阅读:
    Android记事本05
    Android记事本开发04
    Android记事本开发03
    Android记事本开发02
    Android记事本开发01
    项目目标文档
    利益相关者描述案例
    《软件需求》阅读笔记03
    《软件需求》阅读笔记02
    《软件需求》阅读笔记01
  • 原文地址:https://www.cnblogs.com/hph1313/p/5533872.html
Copyright © 2011-2022 走看看