В поисках лучшего алгоритмического подхода к моей проблеме.Любое понимание этого очень ценится.
У меня есть массив чисел, скажем,
short arr[] = [16, 24, 24, 29];
// the binary representation of this would be [10000, 11000, 11000, 11101]
Мне нужно добавить бит в позиции 0 каждого числа и бит в позиции 1 каждого числа и так далее ... сохранить егов массиве, поэтому мой выходной массив должен выглядеть следующим образом:
short addedBitPositions = [4, 3, 1, 0, 1];
// 4 1s in leftmost position, 3 1s in letmost-1 position ... etc.
Решение, которое я могу думать, таково:
addedBitPosition[0] = (2 pow 4) & arr[0] + (2 pow 4) & arr[1] +
(2 pow 4) & arr[2] + (2 pow 4) & arr[3];
addedBitPosition[1] = (2 pow 3) & arr[0] + (2 pow 3) & arr[1] +
(2 pow 3) & arr[2] + (2 pow 3) & arr[3];
... so on
Если длина arr [] возрастает до Mи число битов в каждом M [i] увеличивается до N, тогда временная сложность этого решения составляет O (M * N).
Могу ли я сделать лучше?Спасибо!