拼多多2018年秋招提前批—— 票选球王

题目描述:

M 个投票者给 N 个球星评等级,等级由英文字母表示,’a’级最高,’z’级最低,共26个级别。当 [球星X的评级比Y高] 的票数高于 [球星Y的评级比X高] 的票数时,称候选球星X强于候选球星Y。若有一个候选球星强于其他所有球星,则称为球王。根据这个规则至多有一个球王,否则没有球王。请你判断哪位换选球星是球王。

输入描述:

第一行包含两个数字N、M,分别代表候选球星数量和选票数量;接下来M行,每行是一个长度为N的字符串,每个字符串表示一张选票上的信息。每个字符串的第k个字符,表示这张选票对第k个候选球星。

输出描述:

若有球王,则输出仅包含一个整数X,表示编号为X(0<=X<N)的候选球星是球王;若无球王,则输出一行仅包含一个整数-1。

示例:

这里写图片描述

思路

获取每个投票者对每个球星的打分,然后将球星的打分字符串排序,最后比较即可。

代码

package Interview.pinduoduo;

import java.util.Arrays;
import java.util.Scanner;

//拼多多校招——谁是球王
public class shuishiqiuwang {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        String s = sc.nextLine(); //读取第一行,n:球星数,m:投票者人数
        String[] str = s.split(" ");
        int n = Integer.parseInt(str[0]); //球星数
        int m = Integer.parseInt(str[1]); //投票者人数
        String[] inputStr = new String[m];
        for (int i=0;i<m;i++){
            inputStr[i] = sc.nextLine();
        }
        String[] strs = new String[n]; //每个球星获得的投票数据
        for (int i=0;i<n;i++){
            char[] c = new char[m];
            for (int j=0;j<m;j++){
               c[j] = inputStr[j].charAt(i);
            }
            Arrays.sort(c);
            strs[i] = new String(c);
        }//得到所有投票者对球星打分数据的排序字符串
        for (String s1 : strs){
            System.out.println(s1);
        }
        //使用比较字符串的大小,判断是否存在球星,如果有最大值且大于一个,则不存在球星。
        int max = 0;
        for (int i=1;i<n;i++){
            if (strs[max].compareTo(strs[i])>0){
                max =i;
            }
            if (strs[max].compareTo(strs[i])==0){
                System.out.println("-1");
                return;
            }
        }
        System.out.println(max);
    }
}

猜你喜欢

转载自blog.csdn.net/huan_chen/article/details/81182489