You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:48:35