记录 java学习三-热搜用户

题目

巨博是一种社交软件,用户可以在jubo软件中发巨博。一条巨博中可能提及一些其他用户,比如用户“罗祥说没办法”发了一条巨博:“今天给粉丝抽奖送一部手机。@大米手机 @巨博抽奖平台”,此时用户“大米手机”、“巨博抽奖平台”被“罗祥说没办法”提及。

现在有 N(1 < N < 10000)N(1<N<10000) 条巨博,其中的用户名已经被提取出来,用小于等于 100100 的正整数代替。

找到巨博热搜人物,即被提及次数最多的用户(如果有多个,找到编号最小的),并找出那些提及它的用户。

输入格式

第一行:巨博数量 NN,1 < N < 100001<N<10000。

接下来 NN行:每行表示一条巨博,内容为:

作者序号 aa,提及用户的数量 k(0 \le k \le 20)k(0≤k≤20),然后是 kk 个被提及的用户的序号 b_1,b_2...b_kb1​,b2​...bk​;其中 aa 和 b_1,b_2...b_kb1​,b2​...bk​ 均为小于等于 100100 的自然数。

输出格式

第一行:被提及最多的用户的序号;

第二行:提及它的用户的序号(从小到大输出)

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int N = Integer.parseInt(input.nextLine());
        int[] count=new int[102];
        int mostc=0;//出现最多次的次数
        int mostd = 0;//出现最多的数
        List mostA=new ArrayList<>();//提到出现最多的用户的发布者
        int [][]data=new int[N][22];//
        String[] bk;
        for (int i=0;i<N;i++){
            bk = input.nextLine().split(" ");//获取一条
            for (int j =0;j<bk.length;j++){
                data[i][j]= Integer.parseInt(bk[j]);
                if (j!=0&&j!=1) {//排除发布者和涉及人数
                    count[data[i][j]] += 1;
                    if(count[data[i][j]]>mostc){
                        mostd=data[i][j];
                        mostc=count[data[i][j]];
                    }
                    else if(count[data[i][j]]==mostc&&data[i][j]<mostd){
                        mostd=data[i][j];
                        mostc=count[data[i][j]];
                    }
                }
            }
        }
        for (int i =0;i<data.length;i++){
            for (int j=2;j<=data[i][1]+1;j++){
                if (data[i][j]==mostd){
                    mostA.add(data[i][0]);
                }
            }
        }
        System.out.println(mostd);
        List list0=new ArrayList<>();
        Collections.sort(mostA);
        for (Object str:mostA){
            if(!list0.contains(str)){
                list0.add(str);
            }
        }
        mostA.clear();
        mostA.addAll(list0);
        for (int i=0;i<mostA.size();i++){
            System.out.print(mostA.get(i)+" ");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值