Este es el problema que estoy resolver (que es un problema de muestra, no es un problema real):Optimización este C# algoritmo (K Diferencia)
Dadas N números, [N < = 10^5] nos necesidad de contar los pares totales de números que tienen una diferencia de K. [K> 0 y K < 1E9]
formato de entrada: primera línea contiene N & K (enteros). La segunda línea contiene N números del conjunto. Todos los N números están seguros de ser distintos. Formato de salida: un entero diciendo que el no de pares de números que tienen un K. diff
Sample Input #00:
5 2
1 5 3 4 2
Sample Output #00:
3
Sample Input #01:
10 1
363374326 364147530 61825163 1073065718 1281246024 1399469912 428047635 491595254 879792181 1069262793
Sample Output #01:
0
ya tengo una solución (y no he podido optimizar ella, así como que tenía esperado). Actualmente mi solución obtiene un puntaje de 12/15 cuando se ejecuta, y me pregunto por qué no puedo obtener 15/15 (mi solución a otro problema no fue tan eficiente, pero obtuve todos los puntos) Aparentemente, el código se ejecuta usando "Mono 2.10.1, C# 4".
¿Alguien puede pensar en una mejor manera de optimizar esto aún más? El perfilador VS dice que evite llamar a String.Split e Int32.Parse. Las llamadas a Int32.Parse no se pueden evitar, aunque creo que podría optimizar el tokenizar la matriz.
Mi solución actual:
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace KDifference
{
class Solution
{
static void Main(string[] args)
{
char[] space = { ' ' };
string[] NK = Console.ReadLine().Split(space);
int N = Int32.Parse(NK[0]), K = Int32.Parse(NK[1]);
int[] nums = Console.ReadLine().Split(space, N).Select(x => Int32.Parse(x)).OrderBy(x => x).ToArray();
int KHits = 0;
for (int i = nums.Length - 1, j, k; i >= 1; i--)
{
for (j = 0; j < i; j++)
{
k = nums[i] - nums[j];
if (k == K)
{
KHits++;
}
else if (k < K)
{
break;
}
}
}
Console.Write(KHits);
}
}
}
No podemos ver que problema sin registrarse ¿Podrías publicar los criterios en los que te califican? –
Sí, lo siento. Pensé que estaba abierto para todos. Los criterios de puntuación específicos no se publican, pero el código pasa por un montón de pruebas. –
¿Obtienes reducciones de puntos por ser lento? ¿O por estar equivocado? ¿O ambos? –