Почему при поиске уникальных чисел массива делают проверку на первые три элемента?
Нашел примеры решения задач и появился вопрос
Из какой логики выходит, что все проверяют почему-то первые три элемента?
Задача - найти уникальное число в массиве
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); }
Дополнительно:
Как именно поставлена задача? С чего вы взяли, что эти решения правильные?
Они были в списке ответов
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 }
Это решение оно не правильно, если в функцию прокинуть массив [1,1] - получается функция выдаст не верный результат, вообще вернет undefined
получается по задаче нужно проверить а действительно ли в массиве 3 элемента - и это условие его не выполняет
Читайте задачу правильно.
All numbers are equal except for one.
Все числа одинаковые, кроме одного.
It’s guaranteed that array contains at least 3 numbers.
Гарантируется, что в массиве минимум 3 числа.
Отсюда и такие решения.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
При поиске уникальных чисел в массиве и проверке на первые три элемента может быть несколько причин. Одна из них - эффективность алгоритма.
Предположим, что у нас есть массив чисел и нам нужно найти все уникальные числа в этом массиве. Мы можем начать с простого и медленного подхода, сравнивая каждый элемент массива со всеми остальными элементами и проверяя, есть ли такое число уже в результате или нет. Однако это решение имеет квадратичную сложность времени.
Чтобы оптимизировать этот процесс, можно начать с проверки только первых трех элементов массива. Если все три элемента различны, то можно с уверенностью сказать, что они являются уникальными. Это позволяет сократить количество операций сравнения в случае, если первые три элемента уже содержат все возможные варианты уникальных чисел.
Такой подход позволяет уменьшить сложность времени алгоритма и сделать поиск уникальных чисел более эффективным. Однако следует помнить, что этот метод не гарантирует нахождение всех уникальных чисел в массиве, поэтому его стоит использовать в зависимости от конкретной задачи и данных.
Пример кода на 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; }
Этот код проверит первые три элемента массива на уникальность и вернет только уникальные числа из них.