Главная > javascript, Колян учится на программиста > Javascript задача для начинающих. Подсчет количества уникальных чисел в массиве.

Javascript задача для начинающих. Подсчет количества уникальных чисел в массиве.

Всем привет!
Продолжаем разбираться с задачами для начинающих. Дядя Коля немного удивлен темпами обучения, но что делать – надо разбираться. Надеюсь, данная статья будет полезна не только ему.

Задача.
Напишите функцию, которая определяет, сколько различных чисел в заданном массиве.

Алгоритм решения.
Предлагаю такой вариант решения.
Внешним циклом идем по массиву слева направо. Внутренним циклом идем назад от текущего элемента. И проверяем встречались ли ранее в массиве такие же значения, как у текущего элемента. Если не встречались, то увеличиваем счетчик уникальных чисел на единицу.

Подробное описание решения.
Например, пусть исходный массив arr=[0,1,2,4,4]. Нулевой элемент сразу засчитываем в уникальные, поскольку, если массив состоит из одного элемента, то он содержит одно уникальное число – этот факт не требует проверки. Поэтому счетчику уникальных чисел сразу присваиваем 1, а проход внешним циклом начинаем слева-направо с элемента 1. (Естественно в начале функции добавим проверку на пустой массив, в этом случае вернем 0). В данной итерации внутренний цикл просматривает элементы, расположенные слева от 1, т.е. сейчас это единственный элемент 0. Сравниваем 1 и 0, поскольку они не равны, то счетчик увеличиваем на 1. Т.е. у нас уже 2 уникальных элемента. Внешний цикл переходи на элемент 2. Внутренний идет по элементам слева от 2, т.е. 1 и 0. Поскольку 2 не равно ни 1, ни 0, то счетчик уникальных чисел опять увеличиваем на 1 и т.д.
Ниже представлена таблица со значениями в каждой из итераций данного примера:

i arr[i] j arr[j] arr[j] == arr[i] unique_flag unique_cnt
1 1 0 0 false true 2
2 2 1 1 false true 2
2 2 0 0 false true 3
3 4 2 2 false true 3
3 4 1 1 false true 3
3 4 0 0 false true 4
4 4 3 4 true false 4
4 4 2 2 false false 4
4 4 1 1 false false 4
4 4 0 0 false false 4

Код javascript:

Надеюсь, все понятно. Если что-то не понятно, то задавайте вопросы.
До скорых встреч.



  1. Комментариев пока нет.
  1. Трекбеков пока нет.