Actualmente todavía estoy aprendiendo el JS básico y me pregunto cómo responder a este tipo de pregunta de matriz.
Pregunta :
Dada la hoja de puntaje del participante para su Día del Deporte Universitario, debe encontrar el puntaje del subcampeón. Se le dan puntuaciones N Guárdalos en una lista y encuentra la puntuación del subcampeón.
Formato de entrada :
La primera línea contiene N . La segunda línea contiene una matriz A[] de N enteros, cada uno separado por un espacio.
Sample Input: [5,2,3,6,6,5]Formato de salida :
Imprime la puntuación del subcampeón.
Sample Output: 5Este es mi código :
function uniqueScore (value, index, self) { return self.indexOf(value) === index } var score = [5,2,3,6,6,5] var filter = score.filter(uniqueScore) var descSort = filter.sort().reverse() function runnerUpScore(x) { var runnerUp = descSort return runnerUp } console.log(runnerUpScore(x))La condición es que estoy atascado cuando ya estoy ordenando la matriz y eliminando duplicados. Por lo tanto, necesito alguna orientación sobre cómo llamar a la matriz ordenada y solo mostrar el índice 1 de la lista de matrices para mostrar el puntaje final.
El problema con su enfoque es que está ordenando la matriz y luego invirtiéndola, lo que cuesta mucho cálculo. Aquí hay una solución simple en O(n). Itera la matriz solo una vez y encuentra el segundo puntaje más alto, que es el segundo puntaje.
var scores = [1,2,3,4,5]; const runnerUpScore = (scores) => { scores = [... new Set(scores)] // get unique elements var largest = -1; var secondLargest = -1; scores.forEach((score) => { if(score >= largest) { secondLargest = largest; largest = score; } else if (score > secondLargest) { secondLargest = score; } }); return secondLargest; } console.log(runnerUpScore(scores));.sort() inversa: let scores = [5, 2, 3, 6, 6, 5]; let reverseOrder = scores.sort((a, b) => b - a); // [6, 6, 5, 5, 3, 2]Set() y luego de vuelta a una matriz: let set = new Set(reverseOrder) // {6:6, 5:5, 3:3, 2:2} this is a representation there's much more to a Set. let unique = [...set] // [6, 5, 3, 2] unique[1] // 5 const scores = [5, 2, 3, 6, 6, 5]; const reverseOrderUnique = [...new Set(scores.sort((a, b) => b - a))]; console.log(reverseOrderUnique); console.log('Runner Up: '+reverseOrderUnique[1]);Simplemente puede lograrlo ordenando la matriz en orden descendente usando Array.sort() y filtrando los duplicados usando el método Set() y luego accediendo a la puntuación finalista desde el 1st índice de la matriz.
Demostración en vivo :
// Input array const scores = [5,2,3,6,6,5]; // Sort the array in descending order and remove the duplicates by using Set() method. const sortedScores = [...new Set(scores.sort((a,b) => ba))]; // Runner Up score by accesing the 1st index value. console.log(sortedScores[1]);