Тёмный

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

Sergey Arkhipov Java Tutorials
Подписаться 20 тыс.
Просмотров 3,1 тыс.
50% 1

Разбор задачи которую мне пришлось как-то решать на собеседовании. Интервьюер хотел таким образом проверить, что я могу что-то внятное накодить в условиях собеседования)
Поддержать канал на Boosty:
boosty.to/arhitutorials
Поддержать канал💰:
yoomoney.ru/to/410018856244871
Наш чатик в Telegram:
t.me/ArhiTutorials
Музыка с финальной заставки за авторством:
Karl Casey @ White Bat Audio

Опубликовано:

 

10 апр 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 59   
@RumEvo
@RumEvo Месяц назад
Интересная задачка! Давай еще похожих, для разминки мозгов) лишним никогда не будет!!
@twobeerornottwobeer5973
@twobeerornottwobeer5973 Месяц назад
Задача то легкая, вот только я без Гугла бы не вспомнил формулу арифметической прогрессии 😆
@user-zj4to7ds1n
@user-zj4to7ds1n Месяц назад
мы можем банально проверять по каждому элементу массива, необязательно морочиться с суммой всех элементов массива. внутри цикла банально ставим условие: Если массив[i] != i+1 .то выводим i+1 в консоль как пропущенное число и прерываем цикл. Если у нас массив не заполнен прогрессией, то только тогда можно применить сумму всех элементов. Допустим, у нас есть шаг прогрессии L, тогда условие будет таково: Если i ==0 , то если массив[i] != i+L, то прерываем цикл и выводим в консоль i+L как пропущенное число, если условие i==0 ложно , то если массив[i]!= (i+1)*L то выводим в консоль (i+1)*L как пропущенное число. А про все эти мудрености с суммой прогрессии можно забыть ,когда у нас есть оператор цикла и мы можем спокойно пользоваться его свойствами.
@arhitutorials
@arhitutorials Месяц назад
Для того в условии задачи написано, что числа в массиве лежат в произвольном порядке.
@Px-eb2dy
@Px-eb2dy Месяц назад
Провал на уровне невнимательно прочитаного ТЗ
@user-zj4to7ds1n
@user-zj4to7ds1n Месяц назад
@@arhitutorials а мы показываем пример с последовательностью натруальных чисел.
@Noname-pz2ps
@Noname-pz2ps Месяц назад
Так комментарий всё равно правильный если проверку числа в массиве выполнять через contains(). Потому что смысл пересчитывать все элементы если отсутствует одно из начальных чисел Да и пересчитывать все числа и считать прогрессию перед сравнением длинны массива с n. Зачем?
@motorInlive
@motorInlive Месяц назад
Большое спасибо за интересную задачку, Сергей)) Пополнила свой список))
@resuuserovich9399
@resuuserovich9399 Месяц назад
а почему нельзя сравнивать элемент массив с индексом? когда они неравны, то выходим. В этом случае даже не всегда нужно делать полный проход по массиву до конца.
@ElectricityLapidus
@ElectricityLapidus Месяц назад
вот еще одно из решеений 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--; }
@SergeyKykov
@SergeyKykov Месяц назад
Для того, чтобы заметить, что число пропущено, достаточно сравнить длину массива с n. Если сделать это в начале, не нужно будет массив суммировать. А особо экономные могут не суммировать в отдельную переменную sum, а вычитать из sumAll.
@Px-eb2dy
@Px-eb2dy Месяц назад
А как ты поймешь, что есть N?
@SergeyKykov
@SergeyKykov Месяц назад
@@Px-eb2dy я это давно понял, а ты поймёшь, если на код посмотришь.
@user-oi7xs9st3i
@user-oi7xs9st3i Месяц назад
@@SergeyKykovзачем так грубо? Если ты понял то подскажи ему
@user-oi7xs9st3i
@user-oi7xs9st3i Месяц назад
@@Px-eb2dy Тебе дано n в котором лежит длина массива. И дан массив. Возьми длину массива и сравни с n. Если равны то в массиве ничего не пропущено, при условии что в массив не подсунули другое число в место пропущенного)
@SergeyKykov
@SergeyKykov Месяц назад
@@user-oi7xs9st3i затем, что прежде чем задавать вопрос, нужно самому хоть маленько подумать. Где ещё искать непонятную латинскую букву, с которой рекомендуют что-то сравнить, как не коде (и/или условии)?
@Noname-pz2ps
@Noname-pz2ps Месяц назад
Ответьте пожалуйста Тут в задаче не хватает уточнения что числа не по порядку или еще условие потому что смысл всех этих расчётов если всё равно все элементы перебираются в цикле и при такой постановке достаточно перебрать и сравнить со счетчиком. Или я что то не учитываю? Второй момент. Зачем мне вычислять сумму всех чисел массива и вычислять прогрессию если я могу просто взять длину списка и сравнить с n до начала каких либо манипуляций в одну строчку кода? Третье. Если опять же это числа даже не по порядку, то почему не использовать проверку вхождения счетчика в список вместо вычислений?
@arhitutorials
@arhitutorials Месяц назад
1) в условии задачи написано, что порядок чисел произвольный. 2) длина списка не позволит узнать какого элемента не хватает. 3) можно все что угодно, тут кто-то и через сортировку предлагал делать. Этим вы покажете ваш оригинальный стиль решения задач)
@Noname-pz2ps
@Noname-pz2ps Месяц назад
@@arhitutorialsпо 2 пункту. Имею ввиду то что если количество элементов равно n, то нет смысла что то делать, а в Вашем варианте вы в начале всё суммируется затем считается прогрессию и сравнивается равны и если да то все на месте. На мой взгляд много лишней работы при отсутствии проблемы) 3. Просто непонятно будет ли считаться многократным прохождение списка использование contains. Потому что если нет, то это 2 строки кода. Цикл и проверка на входит число в список или нет
@KARTER_OMEGA
@KARTER_OMEGA Месяц назад
Интересно. Если известно число элементов массива, и известно что может быть пропущен лишь 1 элемент, то, может, короче будет весь массив прогнать через цикл 1 разок? Тобишь, сам цикл мы ставим на 10 повторений, каждый проход числа у нас будет регистрироваться итератором (i, например, и ставим условие внутри цикла. Сначала, вне цикла i = 0 И делаем так Фор i ин рандже 10 Иф "наш массив для проверки[i]" != i: "Принтуем: "Пропущено число: ", i" Иначе иф i = 10: "Принтуем: "Массив целый." " Вроде сказано - за один проход по массиву. Пошагово, топ топ по массиву слева направо
@KARTER_OMEGA
@KARTER_OMEGA Месяц назад
Но это в случае чисел от 1 до n буквально В случае с случайным порядком и правда проще найти суммы нужного и фактического сложения всех элементов и вычесть один от другого. Но там только разница будет, олицетворяющее число на какой-то позиции, а не номер элемента.
@user-xc8dn1wz7t
@user-xc8dn1wz7t Месяц назад
Надеюсь когда нибудь будет собеседование )
@crazym8nd
@crazym8nd Месяц назад
вводных данных недостаточно, зная улсовие что цифра может быть одна,тогда конечно да,а если в сумме не хватает 5? и это может быть 4 + 1 или 2 + 3 какое-то глупое тестовое
@user-pk8tz2oy6x
@user-pk8tz2oy6x Месяц назад
На примере надо бы перемешать элементы массива, в задаче сказано в произвольном порядке, а то так кажется что есть способ просто сравнить со счётчиком цикла. Всегда удевляло как такая задача может быть связана с дальнейшей работой. 😂. Спасибо, Сергей как всегда интересно.
@fear1779
@fear1779 Месяц назад
Arrays.sort(array), дальше for{ } с условием if (i +1 != array[i]) { число пропущено}
@VasillaRobocraft
@VasillaRobocraft Месяц назад
Сказано же - за один проход по массиву. Сортировка - это тоже проход.
@Px-eb2dy
@Px-eb2dy Месяц назад
Задача видимо легкая (если почитать комментарии), но у меня в голове нарисовался гавнокод. С двумя массивами и тд. Спасибо за инфу, мне как человеку который такое не решал пригодится.
@szcoder77
@szcoder77 Месяц назад
Попробовал просто в лоб, что первое пришло в голову... пробежаться по массиву и проверить исключающие условия 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();
@batkorub
@batkorub Месяц назад
Нужно от суммы чисел S = (n/2) * (1 + n) отнимать по очереди каждое число
@user-lh8om7bb7b
@user-lh8om7bb7b Месяц назад
хотела предложить идти по полному массиву и искать индекс элемента в исследуемом массиве Arrays.asList(newArray).indexOf(fullArray[i]) но чёт не различает, на первом же говорит, что нет такого в исследуемом, хотя там есть(( Почему? но это и стрёмно, конечно, по сравнению с вами предложенным решением, тк внутри то метода цикл явно есть
@user-lh8om7bb7b
@user-lh8om7bb7b Месяц назад
нашла, дело было в том, что newArray был int[ ] , а Arrays не работает с примитивами и делал мне список из одного массива, естественно, не находя в таком списке никакого инта. В целом получилось через такой подход решить, интересно насколько верным считалось бы такое решение?
@user-dw9mq9hy3f
@user-dw9mq9hy3f Месяц назад
Поддерживаю слова, что не сторонник задач на собеседовании. Но этот случай, собираю вариант, что то вроде решения в одну строку и пусть будет, по памяти медленное решение. Быстрый вариант, предпочитаю возможность только проговорить, если вспомню. А подобные вариант через if else, только для ознакомления. Спасибо
@user-se4gg9sk4b
@user-se4gg9sk4b Месяц назад
А мне недавно (у одних жёлтых) попалось такое: есть отсортированный массив неубывающих чисел, например { 1 , 2, 4,4,5,6,6,7,9} и чтсло n =6 например, нужно найти самые крайние индексы всех чисел n которые есть в этом массиве.
@user-se4gg9sk4b
@user-se4gg9sk4b Месяц назад
И кстати, спасибо вам за разбор подобных задач и в целом за контент который вы делаете. Часто можно у вас найти что-то увлекательное и интересное !
@Noname-pz2ps
@Noname-pz2ps Месяц назад
@@user-se4gg9sk4b нужно найти первое число больше n и предыдущее будет искомым id?
@RomanZaycev-ps9hh
@RomanZaycev-ps9hh Месяц назад
For (i=1, i < (длина массива), i++) If i !=mass[i] result = i Else result = "нет пропусков" После цикла показать result Можно ещё прерывать цикл при несовпадении
@SergeyKykov
@SergeyKykov Месяц назад
Аффтар словами не проговорил, что массив не упорядочен и в коде нарисовал упорядоченный, а о том, что числа расположены в произвольном порядке, только на экране написал.
@VitalyK_STU
@VitalyK_STU Месяц назад
@@SergeyKykov Вообще-то он сказал, что цифры могут быть не по порядку. Первая задача программиста: услышать ТЗ. Именно У-СЛЫ-ШАТЬ!
@SergeyKykov
@SergeyKykov Месяц назад
​@@VitalyK_STU Задача формулируется на первой минуте ролика. До предложения решить её самостоятельно. До этого момента не сказано ни слова о том, что "цифры могут быть не по порядку". Хотя, написано на экране. В коде числа упорядочены. Нулевая задача любого исполнителя чего угодно, не только программиста - не додумывать пожелания заказчика. НЕ ДО-ДУ-МЫ-ВАТЬ. Первая задача постановщика, или как сейчас говорят аналитика - внятно сформулировать задачу. ВНЯТ-НО СФОР-МУ-ЛИ-РО-ВАТЬ. Задача автором ролика выполнена не полностью. А первая задача комментатора (а не интернет-тролля), в роли которого вы решили выступить - возражать по делу. ПО ДЕ-ЛУ. Дело обстоит именно так, как я его описал: на этапе постановки о неупорядоченности _не_ _сказано_ ни слова, но написано, Т.е., ваше "возражение" является придиркой. ПРИ-ДИР-КОЙ. Первая задача обсуждения задачи с коллегами - уточнить её суть, а не показать, кто тут самый умный или не очень, как получилось у вас. ИЛИ НЕ О-ЧЕНЬ. "Будьте проще, и люди к вам потянутся!".
@RomanZaycev-ps9hh
@RomanZaycev-ps9hh Месяц назад
Ехал в машине, слушал в наушниках. На остановке накидал решение. Получается не совсем понял условие ! :)
@anjelomanoranjan3908
@anjelomanoranjan3908 Месяц назад
Спасибо, Серега! Забавно, что программисту ТОП уровня, дают на собесах задачи для Junior'ов)))
@arhitutorials
@arhitutorials Месяц назад
Есть поверье, что человек может выучить ответы на все вопросы и таким образом пройти собес, не умея программировать. По этому некоторые считают, что надо дать хотя бы простую задачу, чтоб убедиться, что соискатель вообще умеет писать код)
@Arabonishe
@Arabonishe Месяц назад
Если елемент с индексом і не равно элементу с индексом[і+1]-1, вернуть елемент массива с индексом [і] +1. Если пропущено число, то менее раза пройдешь по массиву.
@arhitutorials
@arhitutorials Месяц назад
Числа в любом порядке могут располагаться по условию задачи.
@JavaITEducation-ql5fs
@JavaITEducation-ql5fs Месяц назад
@@arhitutorials Тоже подумал про этот вариант. Для начала только отсортировать массив нужно. Сортировка ведь не запрещена по условию?
@twobeerornottwobeer5973
@twobeerornottwobeer5973 Месяц назад
@@JavaITEducation-ql5fsнет нельзя, в условии задачи написано, что по массиву можно пройти только один раз, а сортировка это тот же обход массива.
@mywaytopro
@mywaytopro Месяц назад
А якщо два числа пропущені або декілька чисел?
@ffplucyflucy8131
@ffplucyflucy8131 Месяц назад
Ну тут задача в том, что пропущено только 1 число
@user-zy7cv8bn3i
@user-zy7cv8bn3i Месяц назад
Наверное хеш-мапу с ключом - число, и значением - количество появлений. И вытягивать по значению 0 прявлений. Но громоздко чето, наверняка есть что-то проще. Сори, я начинающий😅
@user-jezaxwje6u
@user-jezaxwje6u Месяц назад
Серёга ты че так растолстел?
@arhitutorials
@arhitutorials Месяц назад
Делаю запасы, готовлюсь к моменту, когда программистов вытеснит искусственный интеллект)
@kotlinsky.
@kotlinsky. Месяц назад
Фух, ещё не настолько сильно деградировал!
@genX700
@genX700 Месяц назад
Сумма чисел от 1 до n? Серьёзно? 🤦‍♂ Да любой школьник знает, что это n * (n + 1) / 2. Зачем тут цикл городить?
@Slava-Osipov
@Slava-Osipov Месяц назад
Круто, а как вы узнаете какое число пропущено и пропущено ли оно вообще?
@genX700
@genX700 Месяц назад
​@@Slava-Osipov Элементарно! Вычитаешь сумму элементов массива из суммы чисел от 1 до n, и вуаля - вот тебе и пропущенное число.
@Slava-Osipov
@Slava-Osipov Месяц назад
@@genX700 сумма элементов массива? И как ее без цикла посчитать, смотрим первое свое сообщение. И смотрим что сделал автор
@genX700
@genX700 Месяц назад
@@Slava-Osipov Я же забыл, что мы не можем использовать формулы и должны все делать через циклы. Спасибо, что напомнил! В следующий раз буду внимательнее
@Slava-Osipov
@Slava-Osipov Месяц назад
@@genX700 напиши-ка формулу как посчитать сумму элементов, например: [1, 2, 3, 5] четыре элемента, значения от 1 до 5, какого не хватает, не известно
Далее
Java. Разбираемся с монадами.
20:20
HELLUVA BOSS - THE FULL MOON  // S2: Episode 8
23:10
Java. Для чего нужен Optional?
18:26
Просмотров 11 тыс.
Type Erasure
2:47
Просмотров 3,4 тыс.
The Basics of Strings! [Pt 5] | C# for Beginners
9:53
Java. Методы equals и hashCode.
15:05
Просмотров 36 тыс.
Полиморфизм на практике
10:42
Просмотров 177 тыс.
Java. Enum на примерах.
18:34
Просмотров 8 тыс.