拼多多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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章