Вот со слэшами путаница - прямой слэш - /, бэкслэш (обратный) - \
@НикитаКлусович17 күн бұрын
Спасибо за видео ) не знаю почем, но сложные задачки на литкоде обхожу, решена была только одна, поставил видео на паузу, решил минут за 10, зашла проще чем некоторые easy) спасибо за видео тоже солвнул обходом в ширину) var serialize = function(root) { const result = []; if(!root) { return []; } const queue = [root]; result.push(root.val) while(queue.length) { const curr = queue.shift(); result.push(curr.left?.val ?? null); result.push(curr.right?.val ?? null); if(curr.left) { queue.push(curr.left); } if(curr.right) { queue.push(curr.right) } } while(result[result.length - 1] === null) { result.pop() } return result; }; /** * Decodes your encoded data to tree. * * @param {string} data * @return {TreeNode} */ var deserialize = function(data) { if(!data.length) { return null; } const root = new TreeNode(data[0]); const queue = [root]; for(let i = 1; i < data.length; i++) { const left = data[i]; i++; const right = data[i]; const current = queue.shift(); if(left !== null && left !== undefined) { current.left = new TreeNode(left); queue.push(current.left) } if(right !== null && right !== undefined) { current.right = new TreeNode(right); queue.push(current.right) } } return root; };
@webelart17 күн бұрын
Молодчина!💪
@normajean972317 күн бұрын
Спасибо, очень понятный разбор задачи, особенно если уже смотрел другие видео с деревьями на канале. Хотелось бы ещё больше контента с деревьями ))
@GioMikadzegio900018 күн бұрын
спасибо ! круто ! как можно стать вашим учеником ?:)) "Считаю, что видео сверстано некорректно! Нельзя делать окно с кодом больше, чем окно спикера. Это просто преступление против красоты! Новая прическа - огонь." я исправлю эту ошибку😂
@unicoxr5tj41718 күн бұрын
кака кодерша-голубоглазка🤩
@yennms554718 күн бұрын
Пока что поставил паузу и захотелось сначала решить задачу самому) У вас очень приятный голос)
@pooltechnology18 күн бұрын
Считаю, что видео сверстано некорректно! Нельзя делать окно с кодом больше, чем окно спикера. Это просто преступление против красоты! Новая прическа - огонь.
@webelart18 күн бұрын
🥰❤️😍
@АлексейТ-з3ь18 күн бұрын
куиуи queue ммм просто музыка )
@ЮрийНадолинный22 күн бұрын
спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!👍
@tawiasmajero151923 күн бұрын
Спасибо, очень помогло разобраться!
@webelart23 күн бұрын
@МарияМария-ю4с24 күн бұрын
Вы прекрасны))
@webelart23 күн бұрын
Спасибо, Вы тоже!
@bioman81025 күн бұрын
Только у вас тут не stack, а queue, если чисто к терминологии придераться. Ибо как таковая разница между dfs и bfs в том, что в одном случае используется stack, а в другом queue
@webelart25 күн бұрын
Да, я думала про это написать. Т.к. обычно называю переменную stack. Но корректно queue. Молодец, что заметил!
@webelart25 күн бұрын
Конкретно в этом примере очередь!
@Mr.Bellamy25 күн бұрын
Такой контент мы любим, жалко редко выходит
@muvahidhoschi265225 күн бұрын
Посоветуй пожалуйста как улучшить понимание решение задач, может какие то книжки?
@webelart23 күн бұрын
Просто решать. 1. Для начала улучшаете знание языка в целом, проходите книгу от А до Я, например для JS - эту learn.javascript.ru. 2. Походу изучения, регистрируетесь на сайте любом по решению задач. И берете легкий уровень и пробуете решать. Хоть как. Не получается - следующую задачу и т.д. И так до тех пор пока не получится. 3. Классно, чтобы был ментор, т.е. если вообще не получается с задачами, либо в целом по изучению новых подходов и когда просто не понятно, и чтобы мотивация не падала, классно, чтобы получалось, спросить совета у коллеги выше. Как делала я в прошлом. Использовала всё, но важно стараться решить самому хоть как-то, дальше уже можно разобрать и поспрашивать. Также изучить готовые варианты, либо теорию и тогда понимание новых концепций будет заходить намного лучше, если вы сами попробовали.
@muvahidhoschi265221 күн бұрын
@@webelart Спасибо решение задач очень сложно дается
@p_levin25 күн бұрын
Молодец. Отлично - всё :)
@NeverGTI25 күн бұрын
Голос мега приятный, как видео открыл, все дела забросил и залип. Можно надеяться на асмр видео, например с кодингом? )
@webelart25 күн бұрын
Спасибо! Что такое асмр?
@nick-rrdd26 күн бұрын
Очень крутой выпуск! 🔥 Мне лишь немного не хватило с объяснением useEffect в части Did unmount (с ретёрном, отпиской и тд)
@ЮрийНадолинный26 күн бұрын
спасибо !!!!!!!!!!!!!!!!👍
@romanmed903526 күн бұрын
рад что Вы вернулись. да и тема интересная. к тому же на двух языках сразу. просто клад. ведение лекции вообще стало совсем отлично, как преподаватель в вузе.
@webelart26 күн бұрын
Спасибо за отзыв.
@vmaysov26 күн бұрын
Лена, привет! Нравится ваша академичность и фундаментальный подход. Не планируете разбирать что-либо более прикладное, например, фильтры товаров интернет-магазина или что-то в этом роде?
@webelart26 күн бұрын
Посмотрим, спасибо!
@tomvenom26 күн бұрын
Елена,скажите пожалуйста,насколько важно хорошо уметь верстать фронтендеру? Нужно ли учить предпроцессоры или достаточно знать CSS?
@webelart26 күн бұрын
Верстать, конечно, важно. Можно без препроцессоров. Сейчас больше делается акцент на чистом css. Да и в целом если где-то в компании встретится sass, scss, less, то там не сложно это понять. Основной язык, конечно CSS.
@tomvenom26 күн бұрын
@ а сколько времени +- достаточно уделять верстке,прежде чем перейти на js? Месяца 2 или это много?
@webelart26 күн бұрын
@@tomvenom вообще я бы вместе учила CSS, HTML + JS. Они в целом не отделимы сейчас. Изначально в вузе у нас был дополнительный курс исключительно CSS + HTML - это как прослушать базу и возможно попробовать какие-то вещи, а дальше уже вместе пробуете решать задачи.
@2Extremum24 күн бұрын
@@tomvenom Уделять время верстке нужно все время, пока работаешь даже. Потому что выходит очень много полезного, скорость принятия новых фич в последние годы набрала нереальные обороты и очень многое из того что фронтендер будет делать на js уже легко можно сделать на css, что существенно быстрее и менее ресурсозатратно. И SCSS - это стандарт для нормального фронта, потому как CSS хорош, но миксины не подвезли и не планируют пока даже.
@tomvenom26 күн бұрын
Очень шикарно выглядите)
@webelart26 күн бұрын
Спасибо! 😌
@СергейСорокин-т8у26 күн бұрын
Привет! Я бы ввёл переменную last_level для уровня, на котором последний раз был выведен элемент в result. Дерево обходим сначала направо, потом налево. В текущей вершине результат пишем только в том случае, если текущий уровень ниже last_level (и корректируем last_level). Таким образом, писать в result мы будем только один раз для каждого уровня, а не переписывать туда вообще все элементы по очереди. Но вообще, самая медленная операция тут будет stack.push, по крайней мере если это делать на С++. Вторая по медленности - гуляние по указателям left/right. Поэтому хорошее решение этой задачи - пройтись как раз по тому самому представлению дерева в виде массива ({1, 2, 3, null, 5, null, 4}) и решить её на этом представлении.
@webelart26 күн бұрын
Я переживала относительно stack.shift(). Т.к. удаление сначала. Значит должен пересоздаваться массив. И в целом можно просто идти с индексом, но вновь будет shift push. Кстати, а какие затраты по памяти у stack.push(). Мне казалось в C++ это логарифм.
@СергейСорокин-т8у26 күн бұрын
Тут такой момент... Если решать задачи на Leetcode, то анализа по алгоритмической сложности О(что-нибудь) достаточно. Но на практике, если есть реально много данных и нужно быстро обрабатывать может получится, что просто анализа по алгоритмической сложности может быть недостаточно. И вопрос, как например конкретно сделана та или другая шех-таблица может стать решающим и давать ускорения на порядок, хотя для анализа сложности они типа одинаковые. Я, например, видел ситуации когда хеш-таблицы из Qt тратили пару минут просто на освобождение памяти после работы. Гуляние по системе указателей (как в том же дереве) тоже работает медленно, потому что она не дружелюбна к кэшу процессора. И в конечном итоге ты приходишь к пониманию, что на практике быстро работает только одна структура данных - массив/вектор или как оно там называется в конкретном языке, где просто всё лежит непрерывно в памяти и доступно по индексу. В С++ в частности проблема в том, что выделение памяти работает очень медленно, а все стандартные структуры данных сложнее массива выделяют что-нибудь при каждой вставке (вроде в последний стандарт добавили вариант, который так не делает). Stack можно сделать из обычного массива, сложность операций О(1) (не логарифм, логарифм это вставка в дерево, если нам нужно упорядочивать данные!), но его тоже надо реалацировать при добавлении данных, и тут уже вопрос будет ли он отдавать память, когда из стека данные вынимают или нет, и как много выделений-освобождений памяти получится в результате. > И в целом можно просто идти с индексом, но вновь будет shift push. Если работать с деревом как с деревом, типа там ссылки вправо-влево, то по всем признакам да, нужно иметь стек (или использовать рекурсию, которая сделана через системный стек). Но. Мне кажется, процентов на 99.99%, так как я не пробовал реализовать, что имея представление в виде массива можно решить эту задачу без рекурсии. Потому что там элементы каждого уровня лежат последовательными блоками, и нам нужно просто выдать последний из них, который не является null. Так что это должно быть можно сделать за один проход по массиву с использованием нескольких переменных и без стека. А, если ты хочешь ещё глубже в эту кроличью нору, не факт, что такой порядок укладывания дерева в массив является оптимальным (для задачи поиска элемента за log(n))... По крайней мере двоичный поиск по отсортированному массиву можно разгонять в десятки раз, меняя порядок хранения элементов, а тут похожая штука.
@НикитаКлусович27 күн бұрын
люблю ваши видео, спасибо) отлично как всегда) перед просмотром видео, поставил на паузу, чобы попробывать решить самостоятельно ) мне кажется чуть проще для восприятия получилось за счет деструкторизации var rightSideView = function (root) { const result = []; if (!root) { return result; } const queue = [{ level: 0, node: root }]; while (queue.length) { const {node, level} = queue.shift(); result[level] = node.val; if (node.left) { queue.push({ level: level + 1, node: node.left }); } if (node.right) { queue.push({ level: level + 1, node: node.right }); } } return result; };
@webelart27 күн бұрын
Отличный результат!
@николайкраснов-р3о27 күн бұрын
Привет родная)
@ЮрийЮзгин27 күн бұрын
Спасибо! Интересный разбор задачи!
@dimanjacky27 күн бұрын
Очень приятно! Интересная тема. Спасибо! Давно вас не было. Хотелось бы больше видео!
@sergeym690527 күн бұрын
С возвращением! Как по мне, идея записывать видео с решением прикольных задач - просто огонь. Спасибо!
@GfiffulАй бұрын
Спасибо
@AlexanderCrypto5Ай бұрын
Хорошее видео
@webelartАй бұрын
Спасибо!
@AlexanderCrypto5Ай бұрын
@@webelart Вам огромное спасибо, очень информативное и полезное видео, как раз полностью раскрывается useMemo, useCallback
@zizzxiii2714Ай бұрын
Спасибо вам ❤
@TONY_BERG_BLOGERАй бұрын
❤❤❤🎉
@vvkbees6473Ай бұрын
😻
@СеменБлэкморбаевАй бұрын
Спасибо Большое за урок! Вот один момент я все же не уловил - Допустим какая то функция вызывает внутри себя SetTimeout с нулем в качестве значения таймаута - далее эта функция заканчивает свое выполнение (допустим ее другие функции не вызывали) - таким образом в момент возврата управления из этой функции СТЕК ВЫЗОВОВ у нас будет пуст - ЗНАЧИТ ЛИ ЭТО, что в данный момент движок JS будет смотреть в очередь событий и , обнаружив там callback (установленный SetTimeout(0) ), вызовет этот каллбэк, поместив его контекст в стек вызовов? Или все же движок JS сначала пройдется по всему коду до конца, выполнит его, а затем тольо обратится к ОЧЕРЕДИ СОБЫТИЙ?
@Стас-е3й3хАй бұрын
Здравствуйте. Помогите пожалуйста разобраться как работает этот код: 1 function b() 2 { console.log('b2') } 3 var b = function() 4 { console.log('b1') } 5 b(); Почему на консоле появится b1, а не b2, b1? Где происходит затирание? Ведь перед выполнением кода у нас создаться глобальный контекст выполнения, где будет объект {b:function(), b:undefinded}. Затем начинается выполнение, переходим на первую строку, выполняем function(), выводим в консоль b2. Глобальный контекст выполнения, изменяется на {b: undefinded, b:undefinded}. Далее переходим на строку 3. Глобальный контекст выполнения, изменяется на {b: function(), b:undefinded}. Вызывается функция, которая присвоена переменной b и на консоле появляется b1.
@iuliiazarfin75782 ай бұрын
спасибо, очень помогло разобраться в теме
@dm.hol.36242 ай бұрын
Мидл+ контент, то что надо. А то я вызубрил что-то про хуки, а как использовать - не понимаю. Спасибо.
@angular-developer-e1t2 ай бұрын
Сразу видно что чувствуешь архитектуру. Не чисто на зубрёжке.
@bentonfraizer693 ай бұрын
Елена, спасибо за видео.
@Tadeomnevis3 ай бұрын
Елена,вы чудо)!
@yohankim79964 ай бұрын
I was watching your lecture and set ({tasks: [newtasks, ...tasks]}) Warning: Maximum update depth exceeded. I keep getting this error. Can I check the code?
@alianmanpi354 ай бұрын
спасибо большое, отличное видео
@webelart4 ай бұрын
@@alianmanpi35 ❤️
@mcltdtm4204 ай бұрын
по flatten() действия с удалением и добавлением значений в начало массива очень долгие. первое, что пришло в голову, перебор for'ом и на каждый найденый массив отправлять его в рекурсию. не будет лишних манипуляций з входним массивом, только чтение входного массива и запись в результирующий массив.
@lubovBordunos4 ай бұрын
Здравствуйте. Спасибо что делитесь информацией. На экране просто и понятно. На практике после ввода кода и нажатия энтер возвращался прежний код и новый цвет не появлялся. Многократно проверяла и с другими кодами. Обновление программы, перезагрузка не помогли. Вдруг Вы знаете решение такой проблемы. Спасибо.
@AntonPivnenko4 ай бұрын
Отличный слайдер! Где можно исходники глянуть? Ссылка не работает((
@webelart4 ай бұрын
@@AntonPivnenko я не выкладывала исходники.
@АлександрВидин-с6я4 ай бұрын
Не думаю, что использовать хуки по ощущения правильно. Но спасибо за объяснения