找水王

  要求:

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

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

  思路:既然水网帖子是一半以上,并且每贴必回,有这些要求,可以使用消除法来找水王,一个一个消除,消除到最后剩下的一定是水王。

  代码:

public class Find {
    public static void main(String[] args) {

        int arr[]= {001,002,001,003,001,002,001,003,001,002,001};
        int len=8;
        FindMostData(arr, len);
   }
    public static void FindMostData(int arr[], int len)
    {
        int findNum = 0; // 出现次数超过一半的数;
        int count = 0; // 只要最终count > 0,那么对应的findNum就是出现次数超过一半的数;

        // 循环过程中,i每增加一次,就相当于把i之前的所有元素(除了满足“findNum == arr[i]”条件的arr[i],这些对应元素用“count++”来标记)都抛弃了,但是之后每当执行一次“ count-- ”时,又会从前面这些已保留的且等于findNum的元素中删除一项,直到count == 0,再重选findNum;
        for (int i = 0; i < len; i++)
        {
            if (count == 0) // count为0时,表示当前的findNum需要重选;
            {
                findNum = arr[i];
                count = 1;
            }
            else
            {
                if (findNum == arr[i])
                    count++;
                else
                    count--;
            }
        }

        System.out.println(findNum);
    }

}
原文地址:https://www.cnblogs.com/msdog/p/11061132.html