Найти все повторяющиеся строки в массиве -- Использование поиска по хеш-таблице

Неоптимальное (сложность алгоритма nxn по числу сравнений):

function getDuplicated($strings)
{
   $dublicated = [];
   foreach($strings as $candidate) {
      if (!in_array($candidate, $dublicated)) {
          $count = 0;
          foreach($strings as $str) {
             if ($candidate == $str) {            
                $count++; 
                if ($count == 2) {
                   $dublicated[] = $candidate;
                   break;
                }
             }
          }
      }
   }
   
   return $dublicated;
}

Более оптимальное решение (линейная сложность):


function getDuplicated($strings)
{
   $uniqueElements = [];
   $dublicated = [];
   
   foreach($strings as $candidate) {

      if (array_key_exists($uniqueElements, $candidate)) {
          $dublicated[] = $candidate;
      } else {
          $uniqueElements[$candidate] = 1;
      }
   }
   
   return $dublicated;
   
}

-- в данном случае используется поиск по хэш-таблице (так как ассоциатисные массивы реализованы с использование хэш-таблиц).