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

  Рет қаралды 3,877

Sergey Arkhipov Java Tutorials

Sergey Arkhipov Java Tutorials

Күн бұрын

Пікірлер: 59
@twobeerornottwobeer5973
@twobeerornottwobeer5973 9 ай бұрын
Задача то легкая, вот только я без Гугла бы не вспомнил формулу арифметической прогрессии 😆
@Marcov1ch
@Marcov1ch 5 ай бұрын
Да, это единственная проблема при решении😂, а так можно было бы решить через Arrays.stream(array).sum()
@RumEvo
@RumEvo 9 ай бұрын
Интересная задачка! Давай еще похожих, для разминки мозгов) лишним никогда не будет!!
@SergeyKykov
@SergeyKykov 9 ай бұрын
Для того, чтобы заметить, что число пропущено, достаточно сравнить длину массива с n. Если сделать это в начале, не нужно будет массив суммировать. А особо экономные могут не суммировать в отдельную переменную sum, а вычитать из sumAll.
@Px-eb2dy
@Px-eb2dy 9 ай бұрын
А как ты поймешь, что есть N?
@SergeyKykov
@SergeyKykov 9 ай бұрын
@@Px-eb2dy я это давно понял, а ты поймёшь, если на код посмотришь.
@АлексейА-ц5м
@АлексейА-ц5м 9 ай бұрын
@@SergeyKykovзачем так грубо? Если ты понял то подскажи ему
@АлексейА-ц5м
@АлексейА-ц5м 9 ай бұрын
@@Px-eb2dy Тебе дано n в котором лежит длина массива. И дан массив. Возьми длину массива и сравни с n. Если равны то в массиве ничего не пропущено, при условии что в массив не подсунули другое число в место пропущенного)
@SergeyKykov
@SergeyKykov 9 ай бұрын
@@АлексейА-ц5м затем, что прежде чем задавать вопрос, нужно самому хоть маленько подумать. Где ещё искать непонятную латинскую букву, с которой рекомендуют что-то сравнить, как не коде (и/или условии)?
@Андрюха_айтишник
@Андрюха_айтишник 9 ай бұрын
На примере надо бы перемешать элементы массива, в задаче сказано в произвольном порядке, а то так кажется что есть способ просто сравнить со счётчиком цикла. Всегда удевляло как такая задача может быть связана с дальнейшей работой. 😂. Спасибо, Сергей как всегда интересно.
@Coopersbush
@Coopersbush 5 ай бұрын
Тогда просто применяется сортировка
@Drained-x9m
@Drained-x9m 9 ай бұрын
мы можем банально проверять по каждому элементу массива, необязательно морочиться с суммой всех элементов массива. внутри цикла банально ставим условие: Если массив[i] != i+1 .то выводим i+1 в консоль как пропущенное число и прерываем цикл. Если у нас массив не заполнен прогрессией, то только тогда можно применить сумму всех элементов. Допустим, у нас есть шаг прогрессии L, тогда условие будет таково: Если i ==0 , то если массив[i] != i+L, то прерываем цикл и выводим в консоль i+L как пропущенное число, если условие i==0 ложно , то если массив[i]!= (i+1)*L то выводим в консоль (i+1)*L как пропущенное число. А про все эти мудрености с суммой прогрессии можно забыть ,когда у нас есть оператор цикла и мы можем спокойно пользоваться его свойствами.
@arhitutorials
@arhitutorials 9 ай бұрын
Для того в условии задачи написано, что числа в массиве лежат в произвольном порядке.
@Px-eb2dy
@Px-eb2dy 9 ай бұрын
Провал на уровне невнимательно прочитаного ТЗ
@Drained-x9m
@Drained-x9m 9 ай бұрын
@@arhitutorials а мы показываем пример с последовательностью натруальных чисел.
@Noname-pz2ps
@Noname-pz2ps 9 ай бұрын
Так комментарий всё равно правильный если проверку числа в массиве выполнять через contains(). Потому что смысл пересчитывать все элементы если отсутствует одно из начальных чисел Да и пересчитывать все числа и считать прогрессию перед сравнением длинны массива с n. Зачем?
@motorInlive
@motorInlive 9 ай бұрын
Большое спасибо за интересную задачку, Сергей)) Пополнила свой список))
@Px-eb2dy
@Px-eb2dy 9 ай бұрын
Задача видимо легкая (если почитать комментарии), но у меня в голове нарисовался гавнокод. С двумя массивами и тд. Спасибо за инфу, мне как человеку который такое не решал пригодится.
@АлексейПрохин-ф1р
@АлексейПрохин-ф1р 9 ай бұрын
Поддерживаю слова, что не сторонник задач на собеседовании. Но этот случай, собираю вариант, что то вроде решения в одну строку и пусть будет, по памяти медленное решение. Быстрый вариант, предпочитаю возможность только проговорить, если вспомню. А подобные вариант через if else, только для ознакомления. Спасибо
@RomanZaycev-ps9hh
@RomanZaycev-ps9hh 9 ай бұрын
For (i=1, i < (длина массива), i++) If i !=mass[i] result = i Else result = "нет пропусков" После цикла показать result Можно ещё прерывать цикл при несовпадении
@SergeyKykov
@SergeyKykov 9 ай бұрын
Аффтар словами не проговорил, что массив не упорядочен и в коде нарисовал упорядоченный, а о том, что числа расположены в произвольном порядке, только на экране написал.
@SergeyKykov
@SergeyKykov 9 ай бұрын
​@@VitalyK_STU Задача формулируется на первой минуте ролика. До предложения решить её самостоятельно. До этого момента не сказано ни слова о том, что "цифры могут быть не по порядку". Хотя, написано на экране. В коде числа упорядочены. Нулевая задача любого исполнителя чего угодно, не только программиста - не додумывать пожелания заказчика. НЕ ДО-ДУ-МЫ-ВАТЬ. Первая задача постановщика, или как сейчас говорят аналитика - внятно сформулировать задачу. ВНЯТ-НО СФОР-МУ-ЛИ-РО-ВАТЬ. Задача автором ролика выполнена не полностью. А первая задача комментатора (а не интернет-тролля), в роли которого вы решили выступить - возражать по делу. ПО ДЕ-ЛУ. Дело обстоит именно так, как я его описал: на этапе постановки о неупорядоченности _не_ _сказано_ ни слова, но написано, Т.е., ваше "возражение" является придиркой. ПРИ-ДИР-КОЙ. Первая задача обсуждения задачи с коллегами - уточнить её суть, а не показать, кто тут самый умный или не очень, как получилось у вас. ИЛИ НЕ О-ЧЕНЬ. "Будьте проще, и люди к вам потянутся!".
@RomanZaycev-ps9hh
@RomanZaycev-ps9hh 9 ай бұрын
Ехал в машине, слушал в наушниках. На остановке накидал решение. Получается не совсем понял условие ! :)
@Noname-pz2ps
@Noname-pz2ps 9 ай бұрын
Ответьте пожалуйста Тут в задаче не хватает уточнения что числа не по порядку или еще условие потому что смысл всех этих расчётов если всё равно все элементы перебираются в цикле и при такой постановке достаточно перебрать и сравнить со счетчиком. Или я что то не учитываю? Второй момент. Зачем мне вычислять сумму всех чисел массива и вычислять прогрессию если я могу просто взять длину списка и сравнить с n до начала каких либо манипуляций в одну строчку кода? Третье. Если опять же это числа даже не по порядку, то почему не использовать проверку вхождения счетчика в список вместо вычислений?
@arhitutorials
@arhitutorials 9 ай бұрын
1) в условии задачи написано, что порядок чисел произвольный. 2) длина списка не позволит узнать какого элемента не хватает. 3) можно все что угодно, тут кто-то и через сортировку предлагал делать. Этим вы покажете ваш оригинальный стиль решения задач)
@Noname-pz2ps
@Noname-pz2ps 9 ай бұрын
@@arhitutorialsпо 2 пункту. Имею ввиду то что если количество элементов равно n, то нет смысла что то делать, а в Вашем варианте вы в начале всё суммируется затем считается прогрессию и сравнивается равны и если да то все на месте. На мой взгляд много лишней работы при отсутствии проблемы) 3. Просто непонятно будет ли считаться многократным прохождение списка использование contains. Потому что если нет, то это 2 строки кода. Цикл и проверка на входит число в список или нет
@batkorub
@batkorub 9 ай бұрын
Нужно от суммы чисел S = (n/2) * (1 + n) отнимать по очереди каждое число
@ВасилийЮдин-п8ы
@ВасилийЮдин-п8ы 9 ай бұрын
Надеюсь когда нибудь будет собеседование )
@АсенькаАлей
@АсенькаАлей 9 ай бұрын
хотела предложить идти по полному массиву и искать индекс элемента в исследуемом массиве Arrays.asList(newArray).indexOf(fullArray[i]) но чёт не различает, на первом же говорит, что нет такого в исследуемом, хотя там есть(( Почему? но это и стрёмно, конечно, по сравнению с вами предложенным решением, тк внутри то метода цикл явно есть
@АсенькаАлей
@АсенькаАлей 9 ай бұрын
нашла, дело было в том, что newArray был int[ ] , а Arrays не работает с примитивами и делал мне список из одного массива, естественно, не находя в таком списке никакого инта. В целом получилось через такой подход решить, интересно насколько верным считалось бы такое решение?
@szcoder77
@szcoder77 9 ай бұрын
Попробовал просто в лоб, что первое пришло в голову... пробежаться по массиву и проверить исключающие условия 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();
@KARTER_OMEGA
@KARTER_OMEGA 9 ай бұрын
Интересно. Если известно число элементов массива, и известно что может быть пропущен лишь 1 элемент, то, может, короче будет весь массив прогнать через цикл 1 разок? Тобишь, сам цикл мы ставим на 10 повторений, каждый проход числа у нас будет регистрироваться итератором (i, например, и ставим условие внутри цикла. Сначала, вне цикла i = 0 И делаем так Фор i ин рандже 10 Иф "наш массив для проверки[i]" != i: "Принтуем: "Пропущено число: ", i" Иначе иф i = 10: "Принтуем: "Массив целый." " Вроде сказано - за один проход по массиву. Пошагово, топ топ по массиву слева направо
@KARTER_OMEGA
@KARTER_OMEGA 9 ай бұрын
Но это в случае чисел от 1 до n буквально В случае с случайным порядком и правда проще найти суммы нужного и фактического сложения всех элементов и вычесть один от другого. Но там только разница будет, олицетворяющее число на какой-то позиции, а не номер элемента.
@НикитаСологуб-щ3ц
@НикитаСологуб-щ3ц 9 ай бұрын
А мне недавно (у одних жёлтых) попалось такое: есть отсортированный массив неубывающих чисел, например { 1 , 2, 4,4,5,6,6,7,9} и чтсло n =6 например, нужно найти самые крайние индексы всех чисел n которые есть в этом массиве.
@НикитаСологуб-щ3ц
@НикитаСологуб-щ3ц 9 ай бұрын
И кстати, спасибо вам за разбор подобных задач и в целом за контент который вы делаете. Часто можно у вас найти что-то увлекательное и интересное !
@Noname-pz2ps
@Noname-pz2ps 9 ай бұрын
@@НикитаСологуб-щ3ц нужно найти первое число больше n и предыдущее будет искомым id?
@fear1779
@fear1779 9 ай бұрын
Arrays.sort(array), дальше for{ } с условием if (i +1 != array[i]) { число пропущено}
@VasillaRobocraft
@VasillaRobocraft 9 ай бұрын
Сказано же - за один проход по массиву. Сортировка - это тоже проход.
@Dmitry_Kuznetsov
@Dmitry_Kuznetsov 6 ай бұрын
это уже On(logn) а задача требует O(n)
@Arabonishe
@Arabonishe 9 ай бұрын
Если елемент с индексом і не равно элементу с индексом[і+1]-1, вернуть елемент массива с индексом [і] +1. Если пропущено число, то менее раза пройдешь по массиву.
@arhitutorials
@arhitutorials 9 ай бұрын
Числа в любом порядке могут располагаться по условию задачи.
@JavaITEducation-ql5fs
@JavaITEducation-ql5fs 9 ай бұрын
@@arhitutorials Тоже подумал про этот вариант. Для начала только отсортировать массив нужно. Сортировка ведь не запрещена по условию?
@twobeerornottwobeer5973
@twobeerornottwobeer5973 9 ай бұрын
@@JavaITEducation-ql5fsнет нельзя, в условии задачи написано, что по массиву можно пройти только один раз, а сортировка это тот же обход массива.
@resuuserovich9399
@resuuserovich9399 8 ай бұрын
а почему нельзя сравнивать элемент массив с индексом? когда они неравны, то выходим. В этом случае даже не всегда нужно делать полный проход по массиву до конца.
@crazym8nd
@crazym8nd 9 ай бұрын
вводных данных недостаточно, зная улсовие что цифра может быть одна,тогда конечно да,а если в сумме не хватает 5? и это может быть 4 + 1 или 2 + 3 какое-то глупое тестовое
@LAZIO14
@LAZIO14 9 ай бұрын
Спасибо, Серега! Забавно, что программисту ТОП уровня, дают на собесах задачи для Junior'ов)))
@arhitutorials
@arhitutorials 9 ай бұрын
Есть поверье, что человек может выучить ответы на все вопросы и таким образом пройти собес, не умея программировать. По этому некоторые считают, что надо дать хотя бы простую задачу, чтоб убедиться, что соискатель вообще умеет писать код)
@BrainExplosive
@BrainExplosive 8 ай бұрын
вот еще одно из решеений 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--; }
@mywaytopro
@mywaytopro 9 ай бұрын
А якщо два числа пропущені або декілька чисел?
@ffplucyflucy8131
@ffplucyflucy8131 9 ай бұрын
Ну тут задача в том, что пропущено только 1 число
@Игорь-и7ъ7й
@Игорь-и7ъ7й 9 ай бұрын
Наверное хеш-мапу с ключом - число, и значением - количество появлений. И вытягивать по значению 0 прявлений. Но громоздко чето, наверняка есть что-то проще. Сори, я начинающий😅
@forKotlinsky
@forKotlinsky 9 ай бұрын
Фух, ещё не настолько сильно деградировал!
@genX700
@genX700 9 ай бұрын
Сумма чисел от 1 до n? Серьёзно? 🤦‍♂ Да любой школьник знает, что это n * (n + 1) / 2. Зачем тут цикл городить?
@Slava-Osipov
@Slava-Osipov 9 ай бұрын
Круто, а как вы узнаете какое число пропущено и пропущено ли оно вообще?
@genX700
@genX700 9 ай бұрын
​@@Slava-Osipov Элементарно! Вычитаешь сумму элементов массива из суммы чисел от 1 до n, и вуаля - вот тебе и пропущенное число.
@Slava-Osipov
@Slava-Osipov 9 ай бұрын
@@genX700 сумма элементов массива? И как ее без цикла посчитать, смотрим первое свое сообщение. И смотрим что сделал автор
@genX700
@genX700 9 ай бұрын
@@Slava-Osipov Я же забыл, что мы не можем использовать формулы и должны все делать через циклы. Спасибо, что напомнил! В следующий раз буду внимательнее
@Slava-Osipov
@Slava-Osipov 9 ай бұрын
@@genX700 напиши-ка формулу как посчитать сумму элементов, например: [1, 2, 3, 5] четыре элемента, значения от 1 до 5, какого не хватает, не известно
Java. Разбираемся с монадами.
20:20
Sergey Arkhipov Java Tutorials
Рет қаралды 10 М.
Java. Рекурсия и цикл.
13:07
Sergey Arkhipov Java Tutorials
Рет қаралды 2,6 М.
Quilt Challenge, No Skills, Just Luck#Funnyfamily #Partygames #Funny
00:32
Family Games Media
Рет қаралды 55 МЛН
VIP ACCESS
00:47
Natan por Aí
Рет қаралды 30 МЛН
Cat mode and a glass of water #family #humor #fun
00:22
Kotiki_Z
Рет қаралды 42 МЛН
Задача из Собеседования на 160,000 Евро в Год
13:27
Саша Лукин
Рет қаралды 1,1 МЛН
Задача из Собеседования в Amazon за 5 минут
5:15
Саша Лукин
Рет қаралды 302 М.
Java. Распараллеливаем вычисления на пуле потоков.
21:37
Как устроен Android и его приложения.
30:29
Sergey Arkhipov Java Tutorials
Рет қаралды 24 М.
Что нового в C# 13
14:40
Platinum DEV
Рет қаралды 3,8 М.
Quilt Challenge, No Skills, Just Luck#Funnyfamily #Partygames #Funny
00:32
Family Games Media
Рет қаралды 55 МЛН