Я наткнулся на вопрос на собеседовании, который требовал от кандидата подсчитать все числа в массиве с одинаковыми цифрами.например:
Подсчитать все числа с одинаковыми цифрами с помощью int input = 394 int [] arr = {1, 14, 101, 349, 439, 745, 934}
функциивернет 3, так как 439, 934, 349 имеют одинаковые цифры.Вопрос в том, как решить эту проблему за O (log n)?Я все еще новичок в концепции Большого О, и кроме O (n) и O (n ^ 2) ... у меня возникают проблемы с пониманием того, как архивировать O (log n).
Моя первая мысль быласледует: я бы вычислил сумму цифр всех элементов в массиве.Если сумма равна, они содержат те же цифры, что и входной номер.
int counter = 0;
while (num > 0) {
int digitSum += num % 10;
num = num / 10;
}
for(int i = 0; i < arr.length; i++) {
int k = arr[i];
while (k > 0) {
int sumOfDigits += k % 10;
k = k/10;
}
if(sumOfDigits == digitSum) {
counter++;
}
}
Я знаю, что это займет не менее O (n) времени, но у меня возникли проблемы с поиском лучшего решения.