题目描述:
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);}
}
本文链接:https://my.lmcjl.com/post/20313.html
展开阅读全文
4 评论