Java. Задачка с собеседования.

preview_player
Показать описание
Разбор задачи которую мне пришлось как-то решать на собеседовании. Интервьюер хотел таким образом проверить, что я могу что-то внятное накодить в условиях собеседования)

Поддержать канал на Boosty:

Поддержать канал💰:

Наш чатик в Telegram:

Музыка с финальной заставки за авторством:
Karl Casey @ White Bat Audio
Рекомендации по теме
Комментарии
Автор

Задача то легкая, вот только я без Гугла бы не вспомнил формулу арифметической прогрессии 😆

twobeerornottwobeer
Автор

Интересная задачка! Давай еще похожих, для разминки мозгов) лишним никогда не будет!!

RumEvo
Автор

На примере надо бы перемешать элементы массива, в задаче сказано в произвольном порядке, а то так кажется что есть способ просто сравнить со счётчиком цикла. Всегда удевляло как такая задача может быть связана с дальнейшей работой. 😂. Спасибо, Сергей как всегда интересно.

Андрюха_айтишник
Автор

Задача видимо легкая (если почитать комментарии), но у меня в голове нарисовался гавнокод. С двумя массивами и тд. Спасибо за инфу, мне как человеку который такое не решал пригодится.

Px-ebdy
Автор

Для того, чтобы заметить, что число пропущено, достаточно сравнить длину массива с n. Если сделать это в начале, не нужно будет массив суммировать.
А особо экономные могут не суммировать в отдельную переменную sum, а вычитать из sumAll.

SergeyKykov
Автор

мы можем банально проверять по каждому элементу массива, необязательно морочиться с суммой всех элементов массива.
внутри цикла банально ставим условие: Если массив[i] != i+1 .то выводим i+1 в консоль как пропущенное число и прерываем цикл.
Если у нас массив не заполнен прогрессией, то только тогда можно применить сумму всех элементов. Допустим, у нас есть шаг прогрессии L, тогда условие будет таково: Если i ==0, то если массив[i] != i+L, то прерываем цикл и выводим в консоль i+L как пропущенное число, если условие i==0 ложно, то если массив[i]!= (i+1)*L то выводим в консоль (i+1)*L как пропущенное число. А про все эти мудрености с суммой прогрессии можно забыть, когда у нас есть оператор цикла и мы можем спокойно пользоваться его свойствами.

Drained-xm
Автор

For (i=1, i < (длина массива), i++)
If i !=mass[i] result = i
Else result = "нет пропусков"

После цикла показать result
Можно ещё прерывать цикл при несовпадении

RomanZaycev-pshh
Автор

Большое спасибо за интересную задачку, Сергей)) Пополнила свой список))

motorInlive
Автор

Поддерживаю слова, что не сторонник задач на собеседовании.
Но этот случай, собираю вариант, что то вроде решения в одну строку и пусть будет, по памяти медленное решение. Быстрый вариант, предпочитаю возможность только проговорить, если вспомню. А подобные вариант через if else, только для ознакомления.
Спасибо

AlexAngreek
Автор

Попробовал просто в лоб, что первое пришло в голову... пробежаться по массиву и проверить исключающие условия

int[] array = {1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12};

int prev = 0;
for (int i = 0; i < array.Length; i++)
{
if (i == 0 && array[i] > 1)
{
Console.WriteLine("1"); return;
}

if (array[i] - prev != 1)
{
Console.WriteLine(prev + 1); return;
}

prev = array[i];
}

Console.ReadKey();

szcoder
Автор

Надеюсь когда нибудь будет собеседование )

ВасилийЮдин-пы
Автор

Нужно от суммы чисел S = (n/2) * (1 + n) отнимать по очереди каждое число

batkorub
Автор

а почему нельзя сравнивать элемент массив с индексом? когда они неравны, то выходим. В этом случае даже не всегда нужно делать полный проход по массиву до конца.

resuuserovich
Автор

Интересно.
Если известно число элементов массива, и известно что может быть пропущен лишь 1 элемент, то, может, короче будет весь массив прогнать через цикл 1 разок?

Тобишь, сам цикл мы ставим на 10 повторений, каждый проход числа у нас будет регистрироваться итератором (i, например, и ставим условие внутри цикла.
Сначала, вне цикла i = 0

И делаем так

Фор i ин рандже 10
Иф "наш массив для проверки[i]" != i:
"Принтуем: "Пропущено число: ", i"
Иначе
иф i = 10:
"Принтуем: "Массив целый." "


Вроде сказано - за один проход по массиву. Пошагово, топ топ по массиву слева направо

Burning_out-ec
Автор

А мне недавно (у одних жёлтых) попалось такое: есть отсортированный массив неубывающих чисел, например { 1, 2, 4, 4, 5, 6, 6, 7, 9} и чтсло n =6 например, нужно найти самые крайние индексы всех чисел n которые есть в этом массиве.

НикитаСологуб-щц
Автор

Arrays.sort(array), дальше for{ } с условием if (i +1 != array[i]) { число пропущено}

fear
Автор

вводных данных недостаточно, зная улсовие что цифра может быть одна, тогда конечно да, а если в сумме не хватает 5? и это может быть 4 + 1 или 2 + 3
какое-то глупое тестовое

crazymnd
Автор

хотела предложить идти по полному массиву и искать индекс элемента в исследуемом массиве


но чёт не различает, на первом же говорит, что нет такого в исследуемом, хотя там есть(( Почему?

но это и стрёмно, конечно, по сравнению с вами предложенным решением, тк внутри то метода цикл явно есть

АсенькаАлей
Автор

вот еще одно из решеений
int n = 10;
int[] array = new int[] {1, 2, 3, 4, 5, 6, 8, 9, 10};
for (int i = array.length - 1; i >= 0; i--) {
if (n != array[i]) {
System.out.println(n);
n--;
}
n--;
}

BrainExplosive
Автор

Спасибо, Серега! Забавно, что программисту ТОП уровня, дают на собесах задачи для Junior'ов)))

LAZIO