просто веселят такие задания.. к чему про алгоритмы спрашивать, когда простейшее решение находится в интернете+поиск подходящих функций на пхп.нет для массивов
Про алгоритмы спрашивать надо. Но это опять-же должна быть задача показывающая умение думать, а не память.
Даже если алгоритм решает задачу в лоб это уже показатель. В зависимости от ситуации в качестве дополнения можно попросить оптимизировать предложенный алгоритм.
На приведенную задачу, я бы предложил решение в котором в начале в один цикл строится то, что выдает функция array_count_values, а вторым циклом написал бы поиск того ключа, у которого значение 1. А решение с XOR не факт что бы вспомнил сразу. Хотя если бы мне дали уточнение, что решить надо через XOR, тогда такой ответ в один цикл становится очевидным.
array_count_values - его сложность явно как минимум O(n * log(n)).
Мой способ - O(n).
Не правильно. Оба способа O(n), но различаются константой, которая в оценке O() не учитывается.
Рассмотрим работу array_count_values - в цикле перебрать все элементы (О(n)), для каждого элемента проверить его наличие в hash-таблице (О(1)), если его нет - добавить (О(1)) если есть, увеличить счетчик (О(1)). Как результат имеем суммарную сложность О(n).
Сложность array_search тоже О(n), так как необходим перебор всех элементов.
Оба шага последовательно дадут суммарную сложность опять-же О(n).
ПС. приведи задачу, решение которой не найти в нете
Таких задач примерно две бесконечности минус одна
![Smile :) :)](/talk/styles/default/xenforo/smilies/smile.png)
. Я сейчас работаю в области, где таких задач много, правда с WEBом она практически никак не связана.