Какой LiveCoding начали спрашивать на Java собеседованиях?

  Рет қаралды 2,253

Павел Сорокин

Павел Сорокин

Күн бұрын

Пікірлер: 29
@bob-gd9kg
@bob-gd9kg Күн бұрын
Вот это прорыв, никто не мог придумать структуру которая бы за O(1) работала как со вставкой так и с получением min/max в динамике, а тут на коленке смогли, лучший ментор 😂
@sorokinpavel
@sorokinpavel Күн бұрын
Задача решена корректно, по крайней мере концептуально. И она решается за О(1). Есть некоторые недочеты, например со строгим неравенством при сравнениях минимального с текущим элементом. Если я не прав, то где ошибка?
@bob-gd9kg
@bob-gd9kg Күн бұрын
​@@sorokinpavelесли добавили 1,2,3 , удалили 1, то минимальный больше не найдет, так как все элементы больше минимального не попадали во вторую структуру
@sorokinpavel
@sorokinpavel Күн бұрын
@@bob-gd9kg Это стек, удаление элементов идет только сверху. Если добавляли в порядке 1 2 3, то удаление с верхушки стека будет в порядке 3 2 1
@bob-gd9kg
@bob-gd9kg Күн бұрын
@@sorokinpavel если удаление произвольного элемента не требуется, то ты прав, решение верное👍
@ГеоргийКоломейченко
@ГеоргийКоломейченко 2 күн бұрын
Вообще лучше первую задачу сделать через ноды , чтобы не нагружать доп коллекцией и сделать через дженерики
@_vaneks2179
@_vaneks2179 2 күн бұрын
Как называется плагин который ему помогает с написанием кода?
@vollkovfamilly
@vollkovfamilly 2 күн бұрын
Да, подскажите пожалуйста
@kergshi9847
@kergshi9847 2 күн бұрын
Это не плагин,в самой idea функция
@_vaneks2179
@_vaneks2179 Күн бұрын
@@kergshi9847 как называется? у него идеа сама дописывает код
@ЕвгенийП-д8л
@ЕвгенийП-д8л 2 күн бұрын
В первой задаче не учтены дубли. На добавление нужно нестрогое неравенство, либо счëтчик на каждое значение добавить. Первый вариант, очевидно, проще.
@ovsyannikovo
@ovsyannikovo 2 күн бұрын
ну первая задача конечно не без багов решена. мы при пуше отбрасываем элементы если они не минимальные в данный момент, соответственно содержимое массива мин элементов потеряло целостность. мне кажется правильное решение было бы иметь одну внутреннюю структуру для элементов стэка где элементы будут в отсортированном виде и отдельно структуру индексов элементов которая обеспечит получение элементов по протоколу стэка. то есть при вставке отсортировываем и вставляем в нужное место, при этом минимальный обновится на вершине если нужно. вставка будет за двоичное время, получение элементов и получение мин элемента - константное время. или я не прав?
@bob-gd9kg
@bob-gd9kg Күн бұрын
Все верно, только не двоичное, а логарифмическое, нам не нужно сортировать каждый раз, достаточно найти позицию для вставки
@ЯрославМаринов
@ЯрославМаринов 2 күн бұрын
А как pop и push на базе ArrayList за константное время работать будут? LinkedList так может, ArrayList - нет.
@ПавелОрашков
@ПавелОрашков 2 күн бұрын
Pop - это просто удаления последнего элемента по индексу, после удаления, все что нам нужно сделать это переместить указатель, на новый конец массив. Push, да, иногда может приводить созданию нового массива, большего размера, но во-первых, мы считаем, что это происходит достаточно редко, следовательно время выполнения этой операции размазывается на все предыдущие вставки. Во-вторых копирование старого массива происходит достаточно быстро, из-за того, что все элементы массива лежат в памяти последовательно и ОС видит, что мы читаем данные последовательно и может подгружать заранее новые элементы массива в свой кэш
@ЯрославМаринов
@ЯрославМаринов 2 күн бұрын
​​@@ПавелОрашковпо поводу pop согласен, дополнительной релокации массива не происходит если пишем в конец, не стал смотреть дальше когда про ArrayList услышал . По поводу push: оценка сложности, обычно, осуществляется с помощью O большое. Что происходит под капотом - детали. По факту операция не имеет константного времени выполнения.
@ПавелОрашков
@ПавелОрашков 2 күн бұрын
@@ЯрославМаринов О большое для вставки в конец arrayList - 0(1)
@АлександрКононов-п5т
@АлександрКононов-п5т 2 күн бұрын
@@ПавелОрашков The size, isEmpty, get, set, iterator, and listIterator operations run in constant time. The add operation runs in amortized constant time, that is, adding n elements requires O(n) time. All of the other operations run in linear time (roughly speaking). The constant factor is low compared to that for the LinkedList implementation. Амортизированное O(n) все еще не O(1). Интересно, что в документации операция удаления не упомянута в перечне константных.
@ПавелОрашков
@ПавелОрашков 2 күн бұрын
@@АлександрКононов-п5т чем сложность n для n операций отличается от n операций сложностью O(1)? Ну и в догонку, почему тогда рекомендуемая с точки зрения быстроты имплементации стека в java это arrayDeque?
@Dmitry_Kuznetsov
@Dmitry_Kuznetsov 3 күн бұрын
Молодец что выкрутился с первой задачей, но видно не знает что такое PriorityQueue. С ней было бы проще
@maksymz6695
@maksymz6695 2 күн бұрын
По идее можно использовать простой массив для стека и для мин элемента и при добавлении делать проверку Math.min для value и minStack ну и если меньше то обновлять а если нет то нет. Ну и метод getMin будет возвращать minStack. Кто что думает?
@МаксимШильвян-ж4ы
@МаксимШильвян-ж4ы 2 күн бұрын
вообще, по хорошему, хранить бы мин значение для каждого элемента, ну или хотя бы равенство добавить при добавлении в мин (высчитывать мин с тем, что лежит в minValues и которое добавляем и этот min ложить напротив добавляемого числа) и потом, как только удаляется элемент в основной структуре удалять и верхний из мин. Так у нас всегда будет консистентное состояние. В их же решении, при некоторых случаях, метод getMin не будет возвращать наименьшее значение (например: 6, 6, 7, 8, 9 и 3, 4, 5, 3, 8, 9) как только мы начнем забирать элементы из стэка(конца списка) и дойдем до 3 и 6 соответственно мы удалим их из minValues, а значения в самом стеке у нас еще есть).
@maksymz6695
@maksymz6695 Күн бұрын
@@МаксимШильвян-ж4ы ну я так и предложил, добавлять в минВал значения от макс до мин, и потом когда забирать из стека удалять последний єлемент в минВал
@AliBaba-lf5nr
@AliBaba-lf5nr 2 күн бұрын
Это интервью на джуна или мидла?
@symryvvin
@symryvvin 2 күн бұрын
на терпилу
@алексавы-р5к
@алексавы-р5к 2 күн бұрын
какого джуна? какого мидла? чел не знает left join без связей. это трейни.
@ЕвгенийП-д8л
@ЕвгенийП-д8л 2 күн бұрын
На поржать.
@dimaskusidze
@dimaskusidze 2 күн бұрын
С hashSet еще проще было бы 😅
Это было очень близко...
00:10
Аришнев
Рет қаралды 2,9 МЛН
How it feels when u walk through first class
00:52
Adam W
Рет қаралды 21 МЛН
小蚂蚁会选到什么呢!#火影忍者 #佐助 #家庭
00:47
火影忍者一家
Рет қаралды 109 МЛН
Help Me Celebrate! 😍🙏
00:35
Alan Chikin Chow
Рет қаралды 85 МЛН
Тебя это спросят на JUNIOR JAVA разработчика
1:02:14
Павел Сорокин
Рет қаралды 2,6 М.
CI/CD - Простым языком на понятном примере
15:29
Артём Шумейко
Рет қаралды 72 М.
Жадные алгоритмы
11:10
про АйТи | IT Pro
Рет қаралды 7 М.
Рекрутинг сломан - зачем и почему
23:58
Програмысли
Рет қаралды 23 М.
Как Linux рисует окна?
48:46
Студенческие клубы разработки КНиИТ СГУ
Рет қаралды 29 М.
Собеседование в МТС: Middle Java разработчик не справился!
1:28:10
ШОРТКАТ — менторская программа
Рет қаралды 3,6 М.
Это было очень близко...
00:10
Аришнев
Рет қаралды 2,9 МЛН