使用JavaScript Map实现Tournament Winner算法的积分更新问题
Tournament Winner 算法题问题修复
核心问题说明
- 辅助函数
updateScores缺少积分累加逻辑,对Map的取值、赋值方法使用不熟练 - 主函数未同步更新当前最高积分的队伍,最终返回值永远为空字符串
Map 常用操作说明
你已经用到了Map的has()、set()方法,实现积分累加只需要新增get()方法的使用:
Map.get(key):获取指定key对应的存储值,key不存在时返回undefined- 累加逻辑:先取出队伍当前积分,加上获胜奖励的3分后,再用
set()方法写回Map即可
修复后的完整代码
function tournamentWinner(competitions, results) { let currentWinningTeam = ""; const scoreTracker = new Map(); scoreTracker.set(currentWinningTeam, 0); // 遍历所有比赛 for (const index in competitions) { const result = results[index]; const [homeTeam, awayTeam] = competitions[index]; const teamWhoWon = result === 0 ? awayTeam : homeTeam; // 更新获胜队伍积分 updateScores(teamWhoWon, 3, scoreTracker) // 同步更新当前最高积分队伍 if (scoreTracker.get(teamWhoWon) > scoreTracker.get(currentWinningTeam)) { currentWinningTeam = teamWhoWon; } } return currentWinningTeam; } function updateScores(teamWhoWon, points, scoreTracker) { // 不存在的队伍默认积分为0,累加后重新赋值 const currentScore = scoreTracker.get(teamWhoWon) || 0; scoreTracker.set(teamWhoWon, currentScore + points); } // 测试用例 console.log( tournamentWinner( [ ['HTML', '#C'], ['#C', 'Python'], ['Python', 'HTML'], ], [0, 0, 1] ) );
运行结果说明
你提供的测试用例运行后最终返回Python,符合积分规则:
- #C 获胜1次:积3分
- Python 获胜2次:积6分
- HTML 获胜0次:积0分
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

