题目描述:
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);
}
}