подсчитать количество различных абсолютных значений среди элементов массива

Мне задали вопрос на собеседовании, чтобы найти количество различных абсолютных значений среди элементов массива. Я предложил следующее решение (на C ++), но интервьюеру не понравилась эффективность времени выполнения кода.

  1. Я буду признателен за указатели относительно того, как я могу улучшить эффективность выполнения этого кода?
  2. Также как мне рассчитать эффективность приведенного ниже кода? Цикл for выполняется A.size () раз. Однако я не уверен в эффективности STL std :: find (в худшем случае это могло быть O (n) , так что этот код O (n²) ?

Код:

int countAbsoluteDistinct ( const std::vector &A ) {
  using namespace std;
  list x;

  vector::const_iterator it;
  for(it = A.begin();it < A.end();it++)
    if(find(x.begin(),x.end(),abs(*it)) == x.end())
      x.push_back(abs(*it));
  return x.size();
}

8
задан malat 4 January 2016 в 08:21
поделиться