二、通過投票對團隊排名(Weekly Contest 178)

題目描述:
現在有一個特殊的排名系統,依據參賽團隊在投票人心中的次序進行排名,每個投票者都需要按從高到低的順序對參與排名的所有團隊進行排位。

排名規則如下:

參賽團隊的排名次序依照其所獲「排位第一」的票的多少決定。如果存在多個團隊並列的情況,將繼續考慮其「排位第二」的票的數量。以此類推,直到不再存在並列的情況。
如果在考慮完所有投票情況後仍然出現並列現象,則根據團隊字母的字母順序進行排名。
給你一個字符串數組 votes 代表全體投票者給出的排位情況,請你根據上述排名規則對所有參賽團隊進行排名。

請你返回能表示按排名系統 排序後 的所有團隊排名的字符串。

示例 1:

輸入:votes = [“ABC”,“ACB”,“ABC”,“ACB”,“ACB”]
輸出:“ACB”
解釋:A 隊獲得五票「排位第一」,沒有其他隊獲得「排位第一」,所以 A 隊排名第一。
B 隊獲得兩票「排位第二」,三票「排位第三」。
C 隊獲得三票「排位第二」,兩票「排位第三」。
由於 C 隊「排位第二」的票數較多,所以 C 隊排第二,B 隊排第三。
示例 2:

輸入:votes = [“WXYZ”,“XYZW”]
輸出:“XWYZ”
解釋:X 隊在並列僵局打破後成爲排名第一的團隊。X 隊和 W 隊的「排位第一」票數一樣,但是 X 隊有一票「排位第二」,而 W 沒有獲得「排位第二」。
示例 3:

輸入:votes = [“ZMNAGUEDSJYLBOPHRQICWFXTVK”]
輸出:“ZMNAGUEDSJYLBOPHRQICWFXTVK”
解釋:只有一個投票者,所以排名完全按照他的意願。
示例 4:

輸入:votes = [“BCA”,“CAB”,“CBA”,“ABC”,“ACB”,“BAC”]
輸出:“ABC”
解釋:
A 隊獲得兩票「排位第一」,兩票「排位第二」,兩票「排位第三」。
B 隊獲得兩票「排位第一」,兩票「排位第二」,兩票「排位第三」。
C 隊獲得兩票「排位第一」,兩票「排位第二」,兩票「排位第三」。
完全並列,所以我們需要按照字母升序排名。
示例 5:

輸入:votes = [“M”,“M”,“M”,“M”]
輸出:“M”
解釋:只有 M 隊參賽,所以它排名第一。

提示:

1 <= votes.length <= 1000
1 <= votes[i].length <= 26
votes[i].length == votes[j].length for 0 <= i, j < votes.length
votes[i][j] 是英文 大寫 字母
votes[i] 中的所有字母都是唯一的
votes[0] 中出現的所有字母 同樣也 出現在 votes[j] 中,其中 1 <= j < votes.length

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/rank-teams-by-votes
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

寫一個類即可
實現comparable接口中的方法即可完成:

class Solution {
    
	class Vote implements Comparable<Vote>{
		char tem;
		int [] time;
		public Vote(char tem,int len){
			this.tem = tem;
			time = new int[len];
		}
public String toString() {
			return "Vote{" +
					"tem=" + tem +
					", time=" + Arrays.toString(time) +
					'}';
		}
		@Override
		public int compareTo(Vote o) {
			int[] time = o.time;
			for (int i = 0; i < time.length; i++) {
				if(this.time[i] != time[i]){
					return time[i] - this.time[i] ;
				}
			}
			return - o.tem + tem;
		}
	}
	
	public String rankTeams(String[] votes) {
		if(votes.length == 1){
			return votes[0];
		}
		Map<Character,Vote> map = new HashMap<>();
		for (int i = 0; i < votes[0].length(); i++) {
			map.put(votes[0].charAt(i),new Vote(votes[0].charAt(i),votes[0].length()));
		}
		for (int i = 0; i < votes.length; i++) {
			String vote = votes[i];
			for (int j = 0; j < vote.length(); j++) {
				Vote vote1 = map.get(vote.charAt(j));
				vote1.time[j] ++;
			}
		}
		List<Vote> list = new ArrayList<>();
		for (Vote value : map.values()) {
			list.add(value);
		}
		StringBuilder sb = new StringBuilder();
		
		Collections.sort(list);
		for (Vote vote : list) {
			sb.append(vote.tem);
		}
		
		return sb.toString();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章