Почему при поиске уникальных чисел массива делают проверку на первые три элемента?

Ссылка скопирована
1 ответ

Нашел примеры решения задач и появился вопрос
Из какой логики выходит, что все проверяют почему-то первые три элемента?
Задача - найти уникальное число в массиве
https://www.codewars.com/kata/585d7d5adb20cf33cb000235

findUniq([1, 1, 1, 2, 1, 1, 3, 3, 5, 6, 5, 6, 7, 1, 7])

findUniq([1, 1, 1, 2, 1, 1, 3, 3, 5, 6, 5, 6, 7, 1, 7])

function findUniq(arr) {     let [a,b,c] = arr.slice(0,3);     if( a != b && a!=c ) return a;     for( let x of arr ) if( x!=a ) return x }

function findUniq(arr) { let [a,b,c] = arr.slice(0,3); if( a != b && a!=c ) return a; for( let x of arr ) if( x!=a ) return x }

function findUniq(arr) {     let duplicate = arr[0] == arr[1] ? arr[0] : arr[2];     return arr.find(n => n !== duplicate); }

function findUniq(arr) { let duplicate = arr[0] == arr[1] ? arr[0] : arr[2]; return arr.find(n => n !== duplicate); }

Дополнительно:

Как именно поставлена задача? С чего вы взяли, что эти решения правильные?

  • Rsa97, https://www.codewars.com/kata/585d7d5adb20cf33cb000235
    Они были в списке ответов
  • MishaXXL, поскольку в массиве только один элемент уникальный и равен А, а остальные равны В, то среди первых трех какие-то два точно равны В, и определив это В, ты ищешь число, не равное ему.
  • findUniq([1, 1, 1, 2, 1, 1, 3, 3, 5, 6, 5, 6, 7, 1, 7])

    findUniq([1, 1, 1, 2, 1, 1, 3, 3, 5, 6, 5, 6, 7, 1, 7])

    тут входной массив не соответствует условию задачи

  • Alexandroppolus,
    function findUniq(arr) {     let [a,b,c] = arr.slice(0,3);     if( a != b && a!=c ) return a;     for( let x of arr ) if( x!=a ) return x }

    function findUniq(arr) { let [a,b,c] = arr.slice(0,3); if( a != b && a!=c ) return a; for( let x of arr ) if( x!=a ) return x }

    Это решение оно не правильно, если в функцию прокинуть массив [1,1] - получается функция выдаст не верный результат, вообще вернет undefined

    получается по задаче нужно проверить а действительно ли в массиве 3 элемента - и это условие его не выполняет

  • Alexandroppolus, а нет, туплю, там же написано что гарантируется что в массиве будет минимум 3 числа, тогда это верное
  • Читайте задачу правильно.

    All numbers are equal except for one.

    Все числа одинаковые, кроме одного.

    It’s guaranteed that array contains at least 3 numbers.

    Гарантируется, что в массиве минимум 3 числа.
    Отсюда и такие решения.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    При поиске уникальных чисел в массиве и проверке на первые три элемента может быть несколько причин. Одна из них - эффективность алгоритма.

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

    Чтобы оптимизировать этот процесс, можно начать с проверки только первых трех элементов массива. Если все три элемента различны, то можно с уверенностью сказать, что они являются уникальными. Это позволяет сократить количество операций сравнения в случае, если первые три элемента уже содержат все возможные варианты уникальных чисел.

    Такой подход позволяет уменьшить сложность времени алгоритма и сделать поиск уникальных чисел более эффективным. Однако следует помнить, что этот метод не гарантирует нахождение всех уникальных чисел в массиве, поэтому его стоит использовать в зависимости от конкретной задачи и данных.

    Пример кода на PHP с проверкой первых трех элементов массива на уникальность:

    function findUniqueNumbers($arr) {
        $uniqueNumbers = [];
     
        if(count($arr) < 3) {
            return array_unique($arr);
        }
     
        if($arr[0] != $arr[1] && $arr[0] != $arr[2]) {
            $uniqueNumbers[] = $arr[0];
        }
        if($arr[1] != $arr[0] && $arr[1] != $arr[2]) {
            $uniqueNumbers[] = $arr[1];
        }
        if($arr[2] != $arr[0] && $arr[2] != $arr[1]) {
            $uniqueNumbers[] = $arr[2];
        }
     
        return $uniqueNumbers;
    }

    function findUniqueNumbers($arr) { $uniqueNumbers = []; if(count($arr) < 3) { return array_unique($arr); } if($arr[0] != $arr[1] && $arr[0] != $arr[2]) { $uniqueNumbers[] = $arr[0]; } if($arr[1] != $arr[0] && $arr[1] != $arr[2]) { $uniqueNumbers[] = $arr[1]; } if($arr[2] != $arr[0] && $arr[2] != $arr[1]) { $uniqueNumbers[] = $arr[2]; } return $uniqueNumbers; }

    Этот код проверит первые три элемента массива на уникальность и вернет только уникальные числа из них.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно