问题描述: 有一个数组,每个元素代表一场比赛的胜者编号,比赛是两两进行的,例如比赛1是1号选手和2号选手之间的比赛,比赛2是3号选手和4号选手之间的比赛,以此类推。赢得一场比赛会获得一分,最终获得最多分数的选手将是锦标赛的获胜者。请实现一个函数,找到获胜者的编号。
代码示例:
function tournamentWinner(competitions, results) {
let scores = {};
let winner = '';
for (let i = 0; i < results.length; i++) {
let result = results[i];
let competition = competitions[i];
let homeTeam = competition[0];
let awayTeam = competition[1];
if (result === 1) {
scores[homeTeam] = (scores[homeTeam] || 0) + 3;
if (scores[homeTeam] > scores[winner] || !winner) {
winner = homeTeam;
}
} else {
scores[awayTeam] = (scores[awayTeam] || 0) + 3;
if (scores[awayTeam] > scores[winner] || !winner) {
winner = awayTeam;
}
}
}
return winner;
}
这里使用一个对象scores来记录每个选手的得分,最后返回得分最高的选手编号。
测试结果: 该解法能通过常规的测试用例,但对于一些特殊的测试用例(如选手编号为超出范围的负数)就未能通过。