JavaScript求解Runner Up Score 去重排序后取亚军分问题答疑
JavaScript 实现亚军得分获取解题方案
现有代码待补全与修正点
你已经完成了数组去重、排序的核心思路编写,只需要补全取值逻辑,同时修正2个易出错的问题即可:
- 数组索引从0开始计数,降序排序完成后,索引0是最高分,直接取索引为1的元素就是亚军分数
- 原生
Array.sort()默认按字符串Unicode顺序排序,直接对数字数组使用会出现排序错误(比如数字10会排在2前面),必须传入数字比较函数 - 原有代码中定义的
runnerUpScore函数传入了未定义的参数x,属于冗余逻辑,可直接删除
基于你原有逻辑修正后的可运行代码
// 保留你原有的去重判断函数 function uniqueScore (value, index, self) { return self.indexOf(value) === index } // 测试分数数组,实际提交时可替换为输入读取逻辑 var score = [5,2,3,6,6,5] var uniqueScores = score.filter(uniqueScore) // 传入数字比较函数实现正确的降序排序 var descSortedScores = uniqueScores.sort((a, b) => b - a) // 取索引1的元素即为亚军分数 var runnerUpScore = descSortedScores[1] console.log(runnerUpScore)
运行上述代码会直接输出样例要求的结果5。
适配题目输入格式的完整版本
题目要求第一行读取数值N,第二行读取空格分隔的N个整数,在Node.js环境下可以通过如下逻辑读取标准输入,结合上述核心计算逻辑即可完成题目要求:
const readline = require('readline') const rl = readline.createInterface({ input: process.stdin, output: process.stdout }) function uniqueScore (value, index, self) { return self.indexOf(value) === index } let inputCount = 0 rl.on('line', (line) => { inputCount++ if (inputCount === 2) { const scoreList = line.trim().split(' ').map(Number) const uniqueScores = scoreList.filter(uniqueScore) const descSortedScores = uniqueScores.sort((a, b) => b - a) console.log(descSortedScores[1]) rl.close() } })
内容的提问来源于stack exchange,提问作者Gopala Arcana
相关产品推荐
相关产品推荐

