zoukankan      html  css  js  c++  java
  • 课堂练习——寻找水王

    一,题目
    •三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    •如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
    二,思路

    思路1:因为各个人的id号大小不同,因此可将所有人的id号按照从小到大的顺序进行排序,用快速排序法,时间复杂度为:O(N*logN)。然后遍历整个数组,统计每个id号出现的次数,出现次数超过一半的id号即为所求。总的时间复杂度为O(N*logN+N)。

    思路2:因为知道前提是水王发帖数目超过总发帖数目的一半,因此,将所有id号从小到大排序完成后,只要找到位于数组中间的id号,肯定为水王的id号。此时时间复杂度缩小到O(N*logN)。

    思路3:可以采用我们平时玩的手机游戏小星星的思路,如果上下两个相邻的id号不同,则将其消去,因为水王发帖数目超过总帖数的一半,

    因此水王的id号必定前后相邻。这样时间复杂度为O(N).

    三,代码

    #include <iostream>

    using namespace std;

    int shuiwang(int arr[], int length)

    {     

        int result = arr[0];

        int t = 1;

        for(int i = 1; i < length; ++i)

        {

            if(arr[i] == result)

                t++;

            else

                t--;

            if(t == 0)

            {

                result = arr[i];

                t = 1;

            }

        }

        t = 0;

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

        {

            if(arr[i] == result)

                t++;

        }

      

        return result;

    }

    int main()

    {

        int a[10]={3,2,3,1,2,3,3,3,7,3};

        int* n=a;

        cout<<"水王的id号为:"<<shuiwang(a,9)<<endl;

        return 0;

    }

    四,实验结果

    五,总结

    课上自己想到的只有第一种思路,后来有同学提出第二种思路,最后 处于程序代码优化的考虑,老师为我们提供了第三种思路。通过老师和同学的帮助,最终完成了本次实验,在以后的实验中要扩宽自己的思路

     
  • 相关阅读:
    spring初始化bean时执行某些方法完成特定的初始化操作
    flask与数据库连接相关操作
    解决flask中文乱码的问题
    flask(1)
    First Unique Character in a String (找到一个字符串中第一个不重复的字符)
    Java hashCode() 方法
    Java 类和对象
    Java 一维数组的定义和初始化
    Maven 在运行部署的时候是如何确定推送到 releases 还是 snapshots 仓库的
    Samples for Parallel Programming with the .NET Framework
  • 原文地址:https://www.cnblogs.com/xiaojin123/p/4445471.html
Copyright © 2011-2022 走看看