квадратные числа в последовательности - PullRequest
2 голосов
/ 19 января 2011

Учитывая положительную целую последовательность чисел в массиве с общей разницей 2, например, для 2 4 6 8 Теперь замените каждое число его квадратом.Выполните вычисления эффективно.Мне задали этот вопрос в интервью, и я дал ему решение o (n), используя побитовый оператор, поскольку это операция, кратная 2. Если есть какой-либо лучший метод, пожалуйста, предложите.

Ответы [ 3 ]

4 голосов
/ 19 января 2011

Я не знаю, если это лучше, но это рекурсивно !!!: -)

(n+2)(n+2) = n**2 + 4*n + 4 // and you got n**2
0 голосов
/ 19 января 2011

Это действительно зависит от интервьюера, и то, что они считают «правильным». Если бы это был я, я бы подумал, что (n << 2) + 4 были аккуратными, но с другой стороны, я бы не хотел видеть это в своем коде. Требуется больше внимания для поддержания, и есть хороший шанс, что хороший оптимизатор может сделать такую ​​же хорошую работу. </p>

Я думаю, что фраза «выполнить операцию эффективно», вероятно, является нашей подсказкой о том, что интервьюер искал быстрые вычисления. Это все еще O (n), но давайте не будем забывать, что когда вы сравниваете два алгоритма O (n), коэффициенты снова начинают иметь значение.

0 голосов
/ 19 января 2011
class Square
{
  public static int[] sequence(int[] array)
  {
    int[] result=new int[array.length];
    for(int i=0;i<array.length;i++)
    {
      result[i]=array[i]*array[i];
    }
    return result;
  }
}

// test cases:
// Square.sequence(new int[]{2,4,6,8})
//out put->{ 4, 16, 36, 64 }
...