Код: Выделить всё
originalОднако, когда я помещаю условие удвоения внутри цикла, который создает набор, мой код завершается сбоем на определенных входных данных. Вот код:
Код: Выделить всё
public int findFinalValue(int[] nums, int original) {
Set set = new HashSet();
for (int num : nums) {
set.add(num);
if (set.contains(original)) {
original *= 2;
}
}
return original;
}
Когда я перемещаю условие за пределы цикла следующим образом:
Код: Выделить всё
while (set.contains(original)) {
original *= 2;
}
Мой вопрос:
Почему проверка contains(original) внутри того же цикла, в котором создается набор, вызывает некорректное поведение?
Я предположил, что добавление элементов один за другим и проверка в одном и том же проходе должны логически работать, поскольку в конечном итоге строится один и тот же набор.
Есть ли какие-либо подробности о порядке итерации, времени выполнения обновления или поведение HashSet, которое я неправильно понимаю?
Любое объяснение того, почему логика работает только после создания полного набора, будет очень признательно.
Подробнее здесь: https://stackoverflow.com/questions/798 ... conditions
Мобильная версия