C'est le problème que je suis la résolution (c'est un exemple de problème, pas un vrai problème):Optimisation de cet algorithme C# (Différence K)
nombres donnés N, [N < = 10^5] nous besoin de compter les paires totales de nombres qui ont une différence de K. [K> 0 et K < 1E9]
Format d'entrée: première ligne contient N & K (nombres entiers). La deuxième ligne contient N numéros de l'ensemble. Tous les N nombres sont assurés d'être distincts. Format de sortie: Un entier dire le nbre de paires de nombres qui ont une diff K.
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
J'ai déjà une solution (et je ne l'ai pas été en mesure d'optimiser aussi bien que j'avais espéré). Actuellement, ma solution obtient un score de 12/15 lorsqu'elle est exécutée, et je me demande pourquoi je ne peux pas obtenir 15/15 (ma solution à un autre problème n'était pas aussi efficace, mais j'ai obtenu tous les points). Apparemment, le code est exécuté en utilisant "Mono 2.10.1, C# 4".
Alors, peut-on imaginer une meilleure façon d'optimiser cela? Le profileur VS dit d'éviter d'appeler String.Split et Int32.Parse. Les appels à Int32.Parse ne peuvent pas être évités, même si je suppose que je pourrais optimiser tokenizing le tableau.
Ma solution actuelle:
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);
}
}
}
Nous ne pouvons pas voir que problème sans inscription. Pourriez-vous poster les critères sur lesquels vous êtes noté? –
Oui, désolé. Je pensais que c'était ouvert à tout le monde. Les critères de notation spécifiques ne sont pas affichés, mais le code passe par un tas de tests. –
Obtenez-vous des réductions de points pour être lent? Ou pour avoir tort? Ou les deux? –