找“水王”

   结对开发,由我和张贺共同完成。

编程思路: 

      水王是发帖最多的人,如果用传统的思想来遍历去计数,计算每个id出现多少次再去比较固然能算出来,可是时间复杂度高。我们转换思路重新分析这道题。

  水王的特点为:(1)每贴必回(2)水王的发贴数超过总贴数的一半;

    从头开始遍历,对可能成为水王的人的id进行计数,如果后边的跟他相同就加一,不同就减一,如果为0就重新选择水王。因为水王发的帖子大于一半,所以剩下的就是水王。

package YunSuan;

import java.util.Scanner;
/*
 * 寻找水王
 */
public class ShuiWang {
    public static void main(String[] args) {
        int[] a = null;//存储帖子id
        Scanner sc = new Scanner(System.in);
        System.out.println("帖子总个数:");
        int sum = sc.nextInt();
        a = new int[sum];
        System.out.println("输入每个帖子的作者:");
        for(int i = 0;i < sum;i++)
        {
            a[i] = sc.nextInt();
        }
        sc.close();
        int n = 0;
        int id = -1;


        
        for(int i=0;i<a.length;i++)
        {
            if(n==0)
            {
                id=a[i];
                n=2;
            }
            else
            {
                if(id==a[i])
                {
                    ++n;
                }
                else
                {
                    --n;
                }
            }
        }
        System.out.println("水王的ID是 : " + id);
        
    }

    
}

程序执行结果:

 

总结:

要学会分析问题,发现“水王”的特点,转换思考方式。

没有实现随机生成发帖的id。

原文地址:https://www.cnblogs.com/jingxiaopu/p/6729640.html