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

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

Задача.

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

Алгоритм решения.

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

Подробное описание решения.

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

Код javascript:

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));


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));


Надеюсь, все понятно. Если что-то не понятно, то задавайте вопросы.
До скорых встреч.
Теги:
числа, массив
Добавлено: 31 Марта 2018 07:11:04 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...