Как реализовать этот код лучшим образом?
Если массив уже отсортирован, то достаточно один раз пройти по нему, отмечая моменты смены числаvar count = 1;
for (var i = 1; i < n; i++) {
  if (mark[i] != mark[i-1]) {
    count++;
  }
}
как вариант на более высоком уровне можно положить все входящие данные в Set (коллекцию содержащее множество уникальных элементов), и потом посчитать размер коллекции. 
код будет выглядеть в стиле:inputStringData
 .split(" ")
 .map(inputElement => inputElement.toInt)
 .toSet
 .size
П. С. 
шаг с переводом строки (  .map(inputElement => inputElement.toInt)  ) в тип Интэджер не обязателен, можно посчитать и разные строки, это лишь улучшает эффективность хранения промежуточного массива перед подсчетом