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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
var arr = [1,1,2,2,3,3,4,4,5,5]; function count_unique_num(arr) { /* если массив пустой, то количество уникальных элементов равно 0*/ if (arr.length == 0) { return 0; } var unique_cnt = 1; // счетчик уникальных чисел var unique_flag = true; // флаг уникальности проверяемого числа for (var i = 1; i < arr.length; i++) { unique_flag = true; // по умолчанию считаем текущее число уникальным /* проходим массив в обратном порядке, начиная с элемента arr[i-1] */ for (var j=i-1; j >= 0; j--) { /* если ранее в массиве уже встречались элементы с таким же значение как и у текущего, то изменяем значение флага уникальности на false */ if (arr[j] == arr[i]) { unique_flag = false; } } /* если значение флага уникальности равно true, то увеличиваем счетчик уникальных чисел на единицу */ if (unique_flag) { unique_cnt++; } } return unique_cnt; } document.write(count_unique_num(arr)); |
Надеюсь, все понятно. Если что-то не понятно, то задавайте вопросы.
До скорых встреч.
Свежие комментарии