Задача: Как посчитать одинаковые пары за 1 проход (самая быстрая версия!)
Псевдокод: Линейный алгоритм подсчета одинаковых пар через доп массив
  1. input=<исходный массив N чисел>
  2. // сначала ищем максимальный элемент
  3. max = input[0]
  4. min = input[0]
  5. for (i = 1...N-1) do:
  6. if (input[i] > max) then:
  7. max = input[i]
  8.  
  9. if (input[i] < min) then:
  10. min = input[i]
  11.  
  12. // определяем смещение
  13. shift = min
  14.  
  15. // создаем реверс-массив
  16. countArrSz = max - min + 1
  17. countArr = new array size of [countArrSz]
  18.  
  19. // заполняем его нулями на начальном этапе
  20. for (j = 0...countArrSz) do:
  21. countArr[j] = 0
  22.  
  23. // далее проходимся по всем числам и подсчитываем одинаковые
  24. for (i = 0...N-1) do:
  25. v = input[i]
  26. countIndex = v - shift
  27. countArr[countIndex] = countArr[countIndex] + 1
  28.  
  29. // В конце по формуле перестановок считаем
  30. result = 0
  31. for (j = 0...countArrSz) do:
  32. count = countArr[j]
  33. if (count > 1) then:
  34. result = result + (count - 1) * count / 2
  35.  
  36. return result // возвращаем искомое количество