El problema que tengo que resolver es este:
Hay una gran pila de calcetines que deben emparejarse por color. Dada una serie de números enteros que representan el color de cada calcetín, determine cuántos pares de calcetines con colores iguales hay.
Ejemplo
Hay un par de color y otro de color. Quedan tres calcetines impares, uno de cada color. el numero de parejas es
.
Función descriptiva
Complete la función sockMerchant en el editor a continuación.
sockMerchant tiene los siguientes parámetros:
int n: the number of socks in the pile int ar[n]: the colors of each sockDevoluciones
int: the number of pairs
Mi solucion en javascript ya que se muy poco del idioma fue esta
function sockMerchant(n, ar) { // Write your code here let pairs=0; let counter; ar.sort() for(let i=0; i < n; i++){ if (i == 0){ counter = 1; }else{ if(ar[i] == ar[i-1]){ counter++; }else{ pairs= pairs + Math.floor(counter/2); counter= 1; } } } return pairs }El problema es que hackerranks se queja porque con esta entrada
10 1 1 3 1 2 1 3 3 3 3mi salida es 2 en lugar de 4. ¿Alguien puede decirme por qué? No puedo ver dónde está el problema. si alguien me puede ayudar a ver donde esta el problema se lo agradeceria gracias de antemano jenifer
Desafortunadamente, no pude entender la lógica de su algoritmo propuesto, pero como una solución alternativa, puede echarle un vistazo a mi código. Aquí está mi código javascript para este problema que funciona bien.
Primero, definí un diccionario (ar_count) y conté cada número de la matriz ar y actualicé el diccionario para la clave correspondiente. Definí la clave en forma de "clave"+ar[i] para una codificación fácil y un procesamiento rápido para encontrar la clave existente y para contar pares.
function sockMerchant(n, ar) { var ar_count={}; for(let i=0; i<ar.length;i++){ if("key"+ar[i] in ar_count){ ar_count["key"+ar[i]]+=1; } else{ ar_count["key"+ar[i]]=1; } } //console.log(ar_count); var pairs=0; for (var key in ar_count){ paires+=~~(ar_count[key]/2); } return pairs; }