• 寻找水王


    一、问题描述

      三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。

      如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

    二、设计思想

      如果每次删除两个不同的ID,不管删除的ID是否包含“水王”的ID,在剩下的ID列表中,“水王”ID出现的次数仍然超过总数的一半。可以通过不断重复这个过程,把ID列表中的ID总数降低,最后剩下的一定是水王。

    三、代码实现

    #include <iostream>
    using namespace std;  
      
    typedef int Type;  
      
    Type find (Type *a, int N)  
    {  
        Type candiate;  
        int i, nTimes;  
        for (i = nTimes = 0; i < N; i++)  
        {  
            if (0 == nTimes)  
            {  
                candiate = a[i];  
                nTimes = 1;  
            }  
            else  
            {  
                if (candiate == a[i])  
                {  
                    nTimes++;  
                }  
                else  
                {  
                    nTimes--;  
                }  
            }  
        }  
        return candiate;  
    }   
      
      
    int main()  
    {  
        Type arr[] = {1, 2, 3, 4, 2, 5, 2, 2, 3, 2, 5, 2};  
        printf("over harf id is %d
    ", find(arr, 12));  
        return 0;  
    }  

    四、实现截图

    五、个人总结

    要学会将一个规模很大的问题转化成若干个容易解决的小问题

  • 相关阅读:
    面试范围
    Spark集群基础概念 与 spark架构原理
    RDD 算子补充
    常用Actoin算子 与 内存管理 、共享变量、内存机制
    常用Transformation算子
    spark core (二)
    Spark 介绍
    JSON对象和string的相互转换
    javascript中substring和substr方法
    mongodb学习相关网址
  • 原文地址:https://www.cnblogs.com/420Rock/p/5512995.html
Copyright © 2020-2023  润新知