на тех же собеседованиях спрашивают когда linked list лучше, чем array list - обычно ничего вменяемого придумать не удаётся
надо было мне это объяснить на видео. проблема массивов в том, что когда место заканчивается, тебе надо создать новый массив большего размера, скопировать туда все элементы старого массива и добавить новый элемент уже в новый массив, когда как linked list может расширяться сколько угодно и по одному элементу.
а вот реально применять связный список мне пока не приходилось)
А что если элементов действительно много? миллионы элементов, каждый элемент содержит большое количество данных?) лучше за один проход решить, если такая возможность есть) и быстро и памяти потребляет мало
Это тоже хороший и полезный способ, но все зависит от самой задачи, если достаточно односвязного списка без доп. данных, то нет смысла добавлять доп. данные, а если для задачи полезно держать какие-то данные в узлах, то делаем так)
В первую очередь подбираю задачи, так чтобы объяснить какую-то тему, которая будет полезна на интервью, на примере этой задачи или саму задачу, которая часто встречается на интервью. У меня на канале идут подряд задачи связанные с какой-то темой(two pointers, sliding window), сейчас перешел на тему fast and slow pointer и на примере этой задачи объяснил, что это такое + объяснил что такое связный список и какие они бывают(на видео).
Мне вот давали Reverse Linked List(фаанг в РФ) и десятки других задач(easy/medium/hard).
К сожалению, есть такое, весь спектр ощутил после первой статьи https://habr.com/ru/articles/786184/ Но в то же время бывают и полезные комментарии, поэтому натягиваем броню и вперед)
У каждого свои плюсы и минусы) в задаче сказано про две корзины и для этой задачи решение из коммента более оптимально, но если речь про заложить фундамент на будущее или решить задачу на интервью, то мой подход лучше, т.к. легче
Отличное решение, спасибо что поделились. А задач на литкоде с запутанным описанием хватает) порой стоит чуть перефразировать и решение сразу приходит в голову
You are visiting a farm that has a single row of fruit trees arranged from left to right. The trees are represented by an integer array fruits where fruits[i] is the type of fruit the ith tree produces.
You want to collect as much fruit as possible. However, the owner has some strict rules that you must follow:
You only have two baskets, and each basket can only hold a single type of fruit. There is no limit on the amount of fruit each basket can hold.
Starting from any tree of your choice, you must pick exactly one fruit from every tree (including the start tree) while moving to the right. The picked fruits must fit in one of your baskets.
Once you reach a tree with fruit that cannot fit in your baskets, you must stop.
Given the integer array fruits, return the maximum number of fruits you can pick.
Как буду перезаписывать, я бы объяснил, что это помогает не делать одни и те же операции раз за разом, то есть убираем дублирующие операции, я на каком-то видео наглядно объяснял, почему sliding window работает лучше, чем брутфорс, но к сожалению на этом видео не так хорошо получилось это объяснить. Спасибо за фидбек!
Постараюсь поработать над этим, потому что даже такое "сырое" объяснение удается с трудом, после каждого видео на 10-15 минут, у меня в корзине собирается больше 100 неудачных дублей) Видимо пока опыта не хватает, в будущем планирую перезаписывать старые видео, но уже с лучшим качеством и с более опытным объяснением
Спасибо за обратную связь! Дважды перечитал, но к сожалению такое объяснение даже мне было трудно понимать, хотя я знаю как этот механизм работает. Но в целом я понял, что нужно поменять подход для текстовых объяснений. Буду рад, если получу подобный фидбек для видео)
Лучше не опишешь, добавлю это в комментарии к видео и оставлю ссылку на источник)
Согласен, что третий вариант довольно хитрий и да, второй вариант проще в понимании
Самый оптимальный вариант третий) а две другие лишь подводят к третьему
надо было мне это объяснить на видео.
проблема массивов в том, что когда место заканчивается, тебе надо создать новый массив большего размера, скопировать туда все элементы старого массива и добавить новый элемент уже в новый массив, когда как linked list может расширяться сколько угодно и по одному элементу.
а вот реально применять связный список мне пока не приходилось)
А что если элементов действительно много? миллионы элементов, каждый элемент содержит большое количество данных?)
лучше за один проход решить, если такая возможность есть) и быстро и памяти потребляет мало
Это тоже хороший и полезный способ, но все зависит от самой задачи, если достаточно односвязного списка без доп. данных, то нет смысла добавлять доп. данные, а если для задачи полезно держать какие-то данные в узлах, то делаем так)
В первую очередь подбираю задачи, так чтобы объяснить какую-то тему, которая будет полезна на интервью, на примере этой задачи или саму задачу, которая часто встречается на интервью.
У меня на канале идут подряд задачи связанные с какой-то темой(two pointers, sliding window), сейчас перешел на тему fast and slow pointer и на примере этой задачи объяснил, что это такое + объяснил что такое связный список и какие они бывают(на видео).
Мне вот давали Reverse Linked List(фаанг в РФ) и десятки других задач(easy/medium/hard).
К сожалению, есть такое, весь спектр ощутил после первой статьи https://habr.com/ru/articles/786184/
Но в то же время бывают и полезные комментарии, поэтому натягиваем броню и вперед)
Да, можно и желательно решать так) на видео я как раз предложил зрителям попробовать решить более оптимальным способ
Это medium задача https://leetcode.com/problems/longest-substring-without-repeating-characters , которую дают в десятки разных компаний, включая FAANG)
У каждого свои плюсы и минусы) в задаче сказано про две корзины и для этой задачи решение из коммента более оптимально, но если речь про заложить фундамент на будущее или решить задачу на интервью, то мой подход лучше, т.к. легче
[p]aww, res = 1
[pa]ww, res = 2
[paw]w, res = 3
p[aw]w, res = 3
pa[w]w, res = 3
paw[w], res = 3
Отличное решение, спасибо что поделились.
А задач на литкоде с запутанным описанием хватает) порой стоит чуть перефразировать и решение сразу приходит в голову
https://leetcode.com/problems/fruit-into-baskets/
Описание:
You are visiting a farm that has a single row of fruit trees arranged from left to right. The trees are represented by an integer array
fruits
wherefruits[i]
is the type of fruit theith
tree produces.You want to collect as much fruit as possible. However, the owner has some strict rules that you must follow:
You only have two baskets, and each basket can only hold a single type of fruit. There is no limit on the amount of fruit each basket can hold.
Starting from any tree of your choice, you must pick exactly one fruit from every tree (including the start tree) while moving to the right. The picked fruits must fit in one of your baskets.
Once you reach a tree with fruit that cannot fit in your baskets, you must stop.
Given the integer array
fruits
, return the maximum number of fruits you can pick.это какой-то следующий уровень, круто, спасибо!
Насчет комментариев, согласен, учту!
Как буду перезаписывать, я бы объяснил, что это помогает не делать одни и те же операции раз за разом, то есть убираем дублирующие операции, я на каком-то видео наглядно объяснял, почему sliding window работает лучше, чем брутфорс, но к сожалению на этом видео не так хорошо получилось это объяснить.
Спасибо за фидбек!
я же там как раз рисую окошко и двигаю его на каждом шаге, объясняя почему двигаю с левой стороны(то есть сужаю) или двигаю с правой стороны.
Будет круто, если напишете код, звучит очень интересно, но до конца не понял и вряд ли смогу написать код.
Постараюсь поработать над этим, потому что даже такое "сырое" объяснение удается с трудом, после каждого видео на 10-15 минут, у меня в корзине собирается больше 100 неудачных дублей) Видимо пока опыта не хватает, в будущем планирую перезаписывать старые видео, но уже с лучшим качеством и с более опытным объяснением
Спасибо за обратную связь!
Дважды перечитал, но к сожалению такое объяснение даже мне было трудно понимать, хотя я знаю как этот механизм работает.
Но в целом я понял, что нужно поменять подход для текстовых объяснений.
Буду рад, если получу подобный фидбек для видео)