Оптимизация этого алгоритма C # (разница K)

Это проблема, которую я решаю ( это пример задачи, а не реальная проблема):

Учитывая N чисел, [N <= 10 ^ 5] нам нужно подсчитать общее количество пар чисел, разность которых равна K. [K> 0 и K <1e9]

Формат ввода: 1-я строка содержит N и K (целые числа). 2-я строка содержит N номеров набора. Гарантируется, что все N чисел различны. Формат вывода: одно целое число, обозначающее "нет" пар чисел, имеющих различие 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

У меня уже есть решение (и я не знаю не смог оптимизировать его так, как я надеялся). В настоящее время мое решение получает оценку 12/15 при запуске, и мне интересно, почему я не могу получить 15/15 (мое решение другой проблемы было не таким эффективным, но получилось все по пунктам). Судя по всему, код запускается с использованием «Mono 2.10.1, C # 4».

Так может ли кто-нибудь придумать лучший способ дальнейшей оптимизации? Профилировщик VS советует избегать вызовов String.Split и Int32.Parse. Вызовов Int32.Parse нельзя избежать, хотя, думаю, я мог бы оптимизировать токенизацию массива.

Мое текущее решение:

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);
      }
   }
}
7
задан Neal P 8 October 2011 в 09:10
поделиться