Пример пула потоков Java с использованием Executors и ThreadPoolExecutor
Пул потоков управляет пулом рабочих потоков, он содержит очередь, которая удерживает задачи, ожидающие выполнения. Пул потоков управляет коллекцией потоков Runnable, а рабочие потоки выполняют Runnable из очереди. java.util.concurrent.Executors обеспечивают реализацию интерфейса java.util.concurrent.Executor для создания пула потоков в java.
Давайте напишем простую программу, чтобы объяснить, как она работает.
Вот тестовая программа, в которой мы создаем фиксированный пул потоков из среды Executors.
В приведенной выше программе мы создаем пул потоков фиксированного размера из 5 рабочих потоков. Затем мы отправляем 10 заданий в этот пул, поскольку размер пула равен 5, он начнет работать на 5 заданиях, а другие задания будут в состоянии ожидания, как только одно из заданий будет завершено, другое задание из очереди ожидания будет быть подхваченным рабочим потоком и выполненным.
Класс Executors обеспечивает простую реализацию ExecutorService с использованием ThreadPoolExecutor, но ThreadPoolExecutor предоставляет гораздо больше возможностей, чем это. Мы можем указать количество потоков, которые будут активны при создании экземпляра ThreadPoolExecutor, и мы можем ограничить размер пула потоков и создать нашу собственную реализацию RejectedExecutionHandler для обработки заданий, которые не помещаются в очередь рабочих.
ThreadPoolExecutor предоставляет несколько методов, с помощью которых мы можем узнать текущее состояние исполнителя, размер пула, количество активных потоков и количество задач. Итак, у меня есть поток монитора, который будет печатать информацию об исполнителе через определенный промежуток времени.
Обратите внимание, что при инициализации ThreadPoolExecutor мы сохраняем начальный размер пула как 2, максимальный размер пула до 4 и размер рабочей очереди равным 2. Поэтому, если есть 4 запущенных задачи и отправлено больше задач, рабочая очередь будет содержать только 2 из них. а остальные из них будут обработаны RejectedExecutionHandlerImpl.
Вот вывод вышеуказанной программы, который подтверждает приведенное выше утверждение.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
false
pool-1-thread-4 Start. Command = cmd2
false , isTerminated: false
[monitor] [2 /2 ] Active: 0, Completed: 6, Task: 6, isShutdown: false , isTerminated: false
true , isTerminated: true |
Обратите внимание на изменение количества активных, выполненных и общих выполненных задач исполнителя. Мы можем вызвать метод shutdown (), чтобы завершить выполнение всех представленных задач и завершить пул потоков.
Ссылка: Пример пула потоков Java с использованием Executors и ThreadPoolExecutor от нашего партнера по JCG Панкаджа Кумара в блоге Developer Recipes .
Пул потоков — Thread pool
Образец пула потоков (зеленые поля) с ожидающими задачами (синий) и завершенными задачами (желтый)
В компьютерное программирование, а пул потоков это шаблон разработки программного обеспечения для достижения параллелизм исполнения в компьютерной программе. Часто также называют реплицированные рабочие или же модель рабочий-бригада,[1] пул потоков поддерживает несколько потоки ожидать задачи быть выделенным для одновременный исполнение контролирующей программой. Поддерживая пул потоков, модель увеличивает производительность и позволяет избежать задержек при выполнении из-за частого создания и уничтожения потоков для краткосрочных задач. [2] Количество доступных потоков настраивается на вычислительные ресурсы, доступные программе, например очередь параллельных задач после завершения выполнения.
Содержание
- 1 Спектакль
- 2 Смотрите также
- 3 Рекомендации
- 4 внешняя ссылка
Спектакль
Размер пула потоков — это количество потоков, хранящихся в резерве для выполнения задач. Обычно это настраиваемый параметр приложения, настроенный для оптимизации производительности программы.[3] Выбор оптимального размера пула потоков имеет решающее значение для оптимизации производительности. Метод анализа пула потоков (HTA) на основе гиперболы был предложен для определения оптимального размера пула потоков для процесса индексирования в облаке на основе доступной рабочей нагрузки и пропускной способности.[4]
Одним из преимуществ пула потоков перед созданием нового потока для каждой задачи является то, что накладные расходы на создание и уничтожение потоков ограничиваются первоначальным созданием пула, что может привести к улучшению спектакль и лучшая система стабильность. Создание и уничтожение потока и связанных с ним ресурсов может быть дорогостоящим с точки зрения времени процессом. Однако чрезмерное количество резервных потоков расходует память, а переключение контекста между выполняемыми потоками приводит к снижению производительности. Соединение сокета с другим сетевым хостом, для разрыва и восстановления которого может потребоваться много циклов ЦП, можно поддерживать более эффективно, связывая его с потоком, который существует в течение более чем одной сетевой транзакции.
Использование пула потоков может быть полезно, даже если отложить время запуска потока. Существуют реализации пулов потоков, которые упрощают постановку работы в очередь, контроль параллелизма и синхронизацию потоков на более высоком уровне, чем это можно легко сделать при ручном управлении потоками.[5][6] В этих случаях преимущества использования могут быть вторичными.
Обычно пул потоков выполняется на одном компьютере. Однако пулы потоков концептуально связаны с серверные фермы в котором главный процесс, который сам может быть пулом потоков, распределяет задачи по рабочим процессам на разных компьютерах, чтобы увеличить общую пропускную способность. Смущающе параллельный проблемы легко поддаются этому подходу.[нужна цитата ]
Количество потоков можно динамически регулировать в течение срока службы приложения в зависимости от количества ожидающих задач. Например, веб сервер может добавлять темы, если их много страница в Интернете поступают запросы и могут удалять потоки, когда эти запросы сокращаются.[оспаривается – обсуждать] Стоимость большего пула потоков — увеличение использования ресурсов. Алгоритм, используемый для определения того, когда создавать или уничтожать потоки, влияет на общую производительность:
- Создание слишком большого количества потоков тратит впустую ресурсы и требует времени на создание неиспользуемых потоков.
- Для уничтожения слишком большого количества потоков потребуется больше времени при их повторном создании.
- Слишком медленное создание потоков может привести к снижению производительности клиента (длительное время ожидания).
- Слишком медленное уничтожение потоков может привести к нехватке ресурсов для других процессов. «GitHub — vit-vit / CTPL: современная и эффективная библиотека пула потоков C ++». 2019-09-24.
- «Запрос по фрагменту, параллельному выполнению и соединению: шаблон пула потоков в Java «Бинилдас К. А.
- «Пулы потоков и рабочие очереди «Брайан Гетц
- «Метод объединения рабочих потоков «Прадип Кумар Саху
- «Очередь работы «Ури Твиг: демонстрация кода C ++ объединенных потоков, выполняющих рабочую очередь.
- «Объединение потоков Windows и цепочка выполнения «
- «Пул умных потоков «Автор: Ами Бар
- «Программирование пула потоков в .NET Framework «Дэвид Кармона
- «Пул потоков и асинхронные методы «Джон Скит
- «Создание уведомляющего пула блокирующих потоков в Java «Амир Кирш
- «Практическое многопоточное программирование на Python: пулы потоков и очереди «автор: Noah Gift
- «Оптимизация стратегий пула потоков для CORBA в реальном времени «Ирфан Пьярали, Марина Спивак, Дуглас С. Шмидт и Рон Ситрон
- Документ конференции »Отложенная отмена. Образец поведения «Филипп Бахманн
- временами при обращении к веб-приложению запрос подвисал на неопределенный промежуток времени, потом все начинало работать нормально до следующего зависания;
- в логе сервера приложений временами проскакивала следующая ошибка:
внешняя ссылка
Многопоточность Java: определение, пулы, функции и особенности
Многопоточность Java незаменима тогда, когда в программе нужно организовать одновременную работу разного функционала. Например, нужно, чтобы в программе в момент скачивания какого-либо файла из интернета можно было взаимодействовать с меню, заполнять форму, общаться в чате и др. Все это отдельные потоки работы одной программы.
Многопоточность Java также активно используется при разработке игр, когда нужно, чтобы одновременно происходила обработка физики, игра в сети, голосовое общение игроков и др.
Многопоточность Java и других языков стала активно применяться примерно в начале 2000-х. В это время стали появляться многоядерные компьютеры, которые управлялись тремя известными операционными системами: Windows, Linux, MacOS. Таким образом, у программистов появилась возможность распределять работу программы на несколько ядер. Причем распределение работы происходит в параллельном режиме, благодаря чему появилась такая модель программирования, как «параллельное программирование».
Многопоточность Java
На самом деле, многопоточность Java — это сложная тема со множеством нюансов и тонкостей. Сегодня мы лишь приоткроем занавес в мир многопоточности и параллельного программирования, поэтому начнем с азов.
Программный процесс — это программный код и информация, необходимая для его выполнения. Операционная система каждому процессу выделяет определенное количество памяти, время ядра процессора и другие ресурсы. Под каждый отдельный процесс ОС выделяет виртуальное адресное пространство. Обычно одна запущенная на компьютере программа является одним процессом в операционной системе. Все процессы изолированы друг от друга, поэтому из одного процесса практически невозможно получить доступ к памяти другого процесса — для этого нужны специальные инструменты и знания.
При старте любой программы на устройстве операционная система создает отдельный процесс, куда загружается программный код и информация, необходимая для работы программы. После запуска процесса запускается поток исполнения программы. Поток в процессе может быть один, но также их может быть несколько.
Что такое поток и многопоточность Java
Программа или процесс может исполняться в едином потоке. Так программировали раньше, когда компьютеры были одноядерными. В одноядерном компьютере не было смысла запускать многопоточные программы, потому что их обрабатывало одно ядро процессора, а ядро процессора обрабатывает все поступающие команды последовательно.
Но когда появились многоядерные компьютеры, тогда открылась возможность задействовать несколько ядер компьютеров для выполнения одной программы или процесса. Для этого всего-то нужно распараллелить выполнение программы, то есть создать в ней несколько параллельных потоков выполнения. Таким образом, получается, что поток — это отдельная часть исполняемого кода. На деле же поток является отдельной функцией какой-либо программы.
Если представить, что какой-нибудь канат является процессом, тогда каждая его отдельная нить будет являться потоком, а сам канат можно назвать многопоточным. Кстати, в программировании поток иногда называют «нитью».
Таким образом, можно заключить, что многопоточность в Java — это способность языка организовать параллельное выполнение единой программы в многоядерном устройстве. Многопоточность программы не появляется спонтанно — ее реализует программист собственными усилиями. То есть, если программист не разрабатывает программу в многопоточном режиме, тогда она будет работать в едином потоке. А это значит, что все инструкции в программе будут выполняться последовательно. На деле это может оказаться так: вы запустили в какой-то программе скачивание файла из интернета, и пока скачивание не завершится, вы не сможете взаимодействовать с программой.
Многопоточность Java и многопоточность ядра компьютера
Не нужно путать многопоточность Java и многопоточность ядра. Многопоточность Java — это особенность языка, которая позволяет реализовать параллельное исполнение программы. А многопоточность ядра — это способность ядра обрабатывать программу в несколько потоков.
Чуть выше мы писали, что многопоточность бессмысленна в одноядерном компьютере. Это утверждение верно, если одно ядро компьютера поддерживает выполнение одного потока инструкций. В этом случае все инструкции «выстраиваются» в очередь и выполняются в порядке очереди или приоритетности.
Однако производители процессоров продвинулись в собственном производстве. Уже давно не редкость, когда одно ядро процессора способно обрабатывать инструкции в несколько потоков. Это свойство называется многопоточностью ядра. В этом случае одноядерный компьютер будет способен обработать многопоточную программу. Многопоточность ядра позволяет при меньшем количестве ядер обрабатывать больше инструкций, а значит, делать компьютеры быстрее.
Например, компьютер имеет 2 ядра, а каждое из ядер имеет по 4 потока. Таким образом, двухядерный компьютер может обработать 8 потоков инструкций. Однако не нужно путать количество ядер и количество потоков в ядре. Двухядерный компьютер с 8-ю потоками будет работать менее производительней, чем 8-ядерный компьютер с одним потоком в ядре.
Многопоточность Java и пул потоков
Многопоточность Java помогает ускорить работу программ за счет того, что программа исполняется параллельно. Однако, когда программа относительно небольшая, тогда управлять потоками несложно. Но что делать, когда программа на Java становится реально большой и с огромным количеством потоков? Управлять потоками в такой программе довольно сложно, поэтому был придуман пул потоков в Java.
Пул потоков Java — это своего рода «контейнер» для потоков. Потоки в одном пуле могут выполнять разные задачи, но вся прелесть в том, что управление происходит пулом, а не потоками, то есть в исполнение запускается пул потоков. Таким образом, потоки в пуле самостоятельно выстраиваются в очередь, и после исполнения одного потока следующий начинает исполняться самостоятельно.
Пул потоков в Java дает возможность разделить программу по функциональности. То есть в отдельном пуле находятся потоки, выполняющие определенную задачу. Благодаря пулам многопоточность Java применяется эффективнее.
Заключение
Многопоточность Java — это не веяние программистской моды, а возможность разрабатывать более эффективные программы. Большинство современных устройств многоядерные или многопоточные. В многоядерном устройстве запускать однопоточную программу — это неэффективное использование ресурсов устройства. Если устройство способно выполнять программу в несколько потоков, тогда почему не воспользоваться такой возможностью?
9. Использование Thread и Runnable. Пул потоков, назначение и принципы реализации
Система многопоточности в Java построена на основе класса Thread и сопутствующего ему интерфейса Runnable. Класс Thread инкапсулирует поток выполнения. Чтобы создать новый поток, программа будет или реализ. интерфейс, или расширять класс Thread. И интерфейс, и класс нах-ся в пакете java.lang, => автоматически доступны всем программам.
Интерфейс Runnable абстрагирует модуль исполняемого кода. Можно создать поток в любом объекте, который реализует данный интерфейс. Runnable определяет только один метод void run(), внутри которого определяется код, образующий новый поток. Метод run() может вызвать другие методы, исп. другие классы и объявлять переменные; метод уст. точку входа для другого, параллельного потока выполнения внутри программы. Поток завершится, когда метод run() вернет рез-т. Класс Thread инкапсулирует поток. Thread опр. несколько методов, которые помогают управлять потоками. Метод start() вызывает метод run(), опр. в интерфейсе. Метод sleep() приостанавливает выполнение потока на опред. момент времени. Когда поток «спит», другой может выполнять свою работу, пока спящий не проснется. Класс Thread опр-ет два набора конструкторов: один для создания потока в отдельном экземпляре класса Runnable, другой для создания потока в классах, расш. класс Thread. Для обоих наборов конструкторов поток будет создан как поток пользователя, если не оговорено иного.
Чтобы создать поток посредством реализации интерфейса Runnable, нужно: 1) Создать класс, реализ. интерфейс. 2) внутрь метода run(), опред. интерфейсом, поместить код, который должен вып-ся в потоке. 3) Создать экземпляр класса Runnable. 4) Создать объект Thread, передавая его в экземпляр Runnable. 5) Начать выполнение потока посредством метода start() на экземпляре Thread.
Чтобы создать поток посредством расширения класса Thread, нужно: 1) Создать класс, который будет расширять Thread. 2) Переопределить метод run(), специфицировав код, который будет вып-ся в потоке. 3) Создать экземпляр класса, расш. Thread. 4) Начать вып-ние потока, вызвав метод start() на экземпляре.
Поток является относительно дорогим ресурсом и его создание может быть сопряжено со значительными накладными расходами При разработке программ – серверов зачастую возникает необходимость в параллельной обработке задач или запросов, при этом создание потока каждый раз, когда это нужно оказывается неэффективной стратегией. Для решения подобной проблемы можно воспользоваться «пулом потоков». Пул потоков содержит несколько потоков готовых к работе, которых можно использовать по мере необходимости Пул потоков должен обеспечивать: — возможность быстрого выделения потока для работы — возможность высвобождения потока — систему оповещения о статусе выполняемых задач (для обеспечения обратной связи)
Хотя пул потоков — мощный механизм для структурирования многопоточных приложений, он связан с определенным риском. Приложения, построенные при помощи пулов потоков, подвержены всем тем параллельным рискам, что и любое другое многопоточное приложение, как, например, ошибки синхронизации и взаимоблокировка, и также нескольким другим рискам, специфических также для пулов потоков, таких, как зависимая от пулов взаимоблокировка, пробуксовка ресурсов и рассеяние потока. Одно из преимуществ пулов потоков состоит в том, что они обычно хорошо выполняют операции, имеющие отношение к альтернативным распределяющим механизмам, но это верно только в том случае, если размер пула потоков настроен правильно. Потоки потребляют многочисленные ресурсы, включая память и другие системные ресурсы. Кроме памяти, требующейся для объекта Thread, каждый поток требует двух списков вызовов выполнения, которые могут быть большими. В дополнение к этому, JVM, возможно, создаст «родной» поток для каждого Java-потока, что связано с потреблением дополнительных системных ресурсов. Наконец, поскольку распределяющиеся издержки переключения между потоками малы, для многих потоков переключение процессов может стать значительным замедлением в работе программы. Если пул потоков слишком велик, ресурсы, потребляемые этими потоками, могут в значительной степени повлиять на работу системы. Время будет напрасно потрачено на переключение между потоками, и если потоков больше, чем необходимо, это может вызвать проблемы ресурсного голодания, так как потоки пулов потребляют ресурсы, которые могли бы быть более эффективно использованы другими задачами. Существенный риск в самых разных пулах потоков заключается в утечке потока, которая случается, когда поток удаляется из пула для выполнения задачи, но не возвращается в пул, когда задача выполнена. Во-первых, это происходит, когда задача выдает RuntimeException или Error. Если класс пула их не воспринимает, тогда поток просто прекращается и размер пула потоков сокращается на один. Когда это произойдет достаточное количество раз, пул потоков окажется пустым, и система заблокируется, потому, что нет потоков, доступных для осуществления задач. Задачи, которые постоянно блокируются, например, те, что потенциально ждут ресурсов, которые могут и не стать доступными, или ждут ввода со стороны пользователя, который, возможно, ушел домой, могут также вызвать эффект, эквивалентный утечке потока. Если поток постоянно занимается такой задачей, он фактически удален из пула. Таким задачам следует либо выделять собственный поток, либо ограничить время ожидания. Пул потока — полезный инструмент для организации серверов приложений. Он довольно простой по сути, но есть некоторые моменты, с которыми следует быть осторожными во время применения и использования, такие как взаимоблокировка, пробуксовка ресурсов, и сложности, связанные с wait() и notify(). Если требуется пул потоков для приложения, рассмотрите использование одного из классов Executor из util.concurrent, такой как PooledExecutor, вместо создания нового с нуля.
Оптимизация Glassfish — настройка пула потоков
Одной из самых важных этапов оптимизации сервера приложений Glassfish является настройка пула потоков обработки запросов (Thread Pool).
1. Предисловие
Толчком к написанию данной статьи стало появление назойливого сбоя в работе приложения.
Признаки сбоя заключались в следующем:
[#|2013-04-09T11:26:37.615+0400|FINE|glassfish4.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=48;_ThreadName=Thread-1;ClassName=com. sun.grizzly.filter.ReadFilter;MethodName=log;|ReadFilter.execute java.nio.channels.ClosedChannelException at sun.nio.ch.SocketChannelImpl.ensureReadOpen(SocketChannelImpl.java:236) at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:279) at com.sun.grizzly.filter.ReadFilter.execute(ReadFilter.java:165) at com.sun.grizzly.filter.ReadFilter.execute(ReadFilter.java:107) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com. sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) |#]
Для выявления причин и исправления ситуации были проведены следующие действия:
- Снятие дампа потоков сервера приложений Glassfish в момент зависания приложения:
bash> asadmin --port=9010 --user=admin –passwordfile=path generate-jvm-report --type=thread Full Java Thread Dump Java HotSpot(TM) 64-Bit Server VM 23.1-b03 Oracle Corporation Number of threads: 64 Number of daemon threads: 53 Peak live thread count since the Java virtual machine started or peak was reset: 88 … Thread "http-thread-pool-8080(5)" thread-id: 41 thread-state: RUNNABLE Running in native … org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate. java:441) … Thread "http-thread-pool-8080(4)" thread-id: 40 thread-state: RUNNABLE Running in native … org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:441) … Thread "http-thread-pool-8080(3)" thread-id: 39 thread-state: RUNNABLE Running in native … org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:441) … Thread "http-thread-pool-8080(2)" thread-id: 38 thread-state: RUNNABLE Running in native … sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322) at: java.net.URL.openStream(URL.java:1035) … Thread "http-thread-pool-8080(1)" thread-id: 37 thread-state: RUNNABLE Running in native … org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:441) … Command generate-jvm-report executed successfully.
- Анализ дампа потоков.
Анализ выявил, что из 5 потоков в пуле 4 были заняты ожиданием ответа от СУБД, а 1 поток был занят ожиданием ответа от запроса к серверу приложений Glassfish, что и вызывало взаимную блокировку. Обращение к сервере приложений уже не могло быть обработано, поскольку все 5 потоков были заняты и поэтому зависание продолжалось до истечения срока пребывания запроса в очереди. - Выявление запросов в СУБД, результатов которых ожидали потоки.
- Исправление возникшей ситуации:
- Настройка максимального количества одновременно выполняющихся потоков.
- Оптимизация запросов к БД.
P.S. Исключение java.nio.channels.ClosedChannelException, выбрасываемое в лог сервера приложений возникало в случае, когда пользователь, не дождавшись ответа, закрывал браузер, а сервер приложений по истечении таймаута пытался закрыть соединение, которое уже было закрыто пользователем.
2. О потоках
Под потоком понимается поток выполнения в виртуальной Java машине.
Glassfish, в целях повышения производительности, управляет несколькими пулами потоков.
Пул потоков — это группа потоков с уникальным наименованием. Каждый пул может быть назначен различным коннекторам и обработчикам. Например, один пул для обработки http запросов, другой для обработки запросов к консоли администрирования и т.п.
3. Обработка запросов Обработка запросов в сервере Glassfish строится по следующей схеме:
- Glassfish получает запрос от клиента
- Проверяется наличие свободного потока выполнения в пуле потоков. Свободный поток — это поток, который находится в состоянии ожидания. Его состояние обозначается статусом TIMED_WAITING.
- Если свободный поток обнаруживается, то обработка запроса отдается этому потоку, и его статус меняется на RUNNING.
- Иначе запрос ставится в очередь ожидания свободного потока. Если по истечении определенного периода времени запросу так и не будет выделен поток выполнения, то этот запрос удаляется из очереди.
- После обработки запроса поток вновь переходит в состояние ожидания. Стоит отметить, что если во время обработки запроса происходят какие-либо время затратные операции: обработка запросов БД, ожидание ввода/вывода, то поток остается в состоянии RUNNING и не освобождается для выполнения других запросов.
4. Настройка пула потоков
Настройку пула потоков можно производить двумя способами:- либо через файл описания настроек домена domain.xml.
- либо динамически через утилиту asadmin.
http://docs.oracle.com/cd/E18930_01/html/821-2416/abluc.html#scrolltoc
5. Опции пула потоков:
Опция | Описание | По умолчанию |
---|---|---|
maxthreadpoolsize | Максимальное количество параллельно выполняющихся потоков | 5 |
minthreadpoolsize | Минимальное количество потоков, находящихся в пуле | 2 |
idletimeout | Количество секунд, которое неактивные потоки находятся в пуле. По прошествии этого времени, неактивные потоки удаляются из пула | 900 |
maxqueuesize | Максимальное количество запросов, которое может находится в очереди, ожидая пока они будут обработаны потоками пула | 4096 |
6. Оптимизация
Задача оптимизации заключается в выборе подходящего под наше приложение набора значений опций.
В принципе, основной опцией, которую следует настраивать, является опция «maxthreadpoolsize».
Опция «maxthreadpoolsize» описывает максимальное количество запросов, которые могут быть обработаны параллельно.
Значение данной опции зависит от характера обработки запросов нашим приложением:
- Если запросы выполняются длительное время и во время обработки выполняют обращения к системе ввода/вывода или к СУБД, то может потребоваться увеличение количества максимального количества параллельно выполняющихся запросов.
- Если же мы имеем дело с большим количеством запросов, обработка, которых ложится целиком на сам сервер приложений, то параллельное выполнение большого количества может вызвать высокую нагрузку на CPU и может понадобиться уменьшение максимального количества параллельно выполняющихся запросов.
В документации по настройке производительности сервера приложений Glassfish говорится о допустимом интервале значения данной опции от 100 до 500, в зависимости от нагрузки.
Также разумно выставлять значение максимального количества параллельно выполняющихся запросов кратным числу процессоров.
Просмотреть число процессоров можно командой:
bash> cat /proc/cpuinfo | grep processor processor : 0 processor : 1 processor : 2 processor : 3
7. Ход оптимизации
В задачу оптимизации в прочем входит настройка параметра максимального количества параллельно выполняющихся запросов и последующий мониторинг состояния сервера с последующей регулировкой значения.
Ход работ по оптимизации может состоять из следующих действий:
- Включение мониторинга:
asadmin> enable-monitoring --modules http-service=HIGH
- Проверка значения количества доступных потоков в пуле и количества работающих потоков в данный момент времени соответственно:
asadmin> get –monitor server. network.http-listener-1.thread-pool.currentthreadcount-count asadmin> get –monitor server.network.http-listener-1.thread-pool.currentthreadsbusy-count
- Проверка нагрузки на CPU:
bash> vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 11916 469756 4039780 3478788 0 0 25 110 0 1 0 24 72 3
Параметр «id» указывает на процент времени нахождения процессора в состоянии покоя. - Изменение значения параметра maxthreadpoolsize в зависимости от полученных результатов на предыдущих шагах:
asadmin> set server.thread-pools.thread-pool.http-thread-pool.max-thread-pool-size=16 Command set executed successfully
8. Мониторинг
После первоначальной настройки сервера приложений Glassfish необходимо настроить регулярный мониторинг его состояния и реагировать на критические моменты, но это уже материал для другой статьи.
Что такое пул потоков?
Обзор
Мы используем потоки в операционных системах для обеспечения параллельной обработки задач и увеличения пропускной способности нашей системы. Пул потоков — это набор рабочих потоков, которые эффективно выполняют асинхронные обратные вызовы от имени приложения. Пул потоков в основном используется для уменьшения количества потоков приложений и обеспечения управления рабочими потоками. Приложения могут ставить рабочие элементы в очередь, связывать работу с дескрипторами ожидания, автоматически ставить в очередь на основе таймера и связываться с вводом-выводом.
Scope
В статье рассказывается о том, что такое пул потоков, об архитектуре пула потоков и о том, как он реализован в Java. В этой статье не рассматриваются низкоуровневые сведения о том, как реализованы пулы потоков, и не рассматривается динамическая точная настройка пула потоков.
Что такое пул потоков?
Как следует из названия, пул потоков — это пул или набор потоков.
Давайте рассмотрим пример книжной библиотеки, чтобы лучше понять пулы потоков. Пользователь приходит в библиотеку и запрашивает книгу, если книги нет в библиотеке, ее необходимо сначала купить, прежде чем выделить ее пользователю. Однако, если библиотека заранее предвидит, что на книгу будет спрос, и хранит книгу до того, как какой-либо пользователь запросит ее, она может сэкономить на задержке покупки книги. Как только пользователь посещает библиотеку, ему может быть немедленно выделена книга. После потребления книга будет возвращена в библиотеку, готовая для передачи другим пользователям
Та же концепция может быть применена к потокам. Предположим, у нас есть две задачи T1 и T2, которые необходимо выполнить одну за другой. T1 запрашивает у компилятора/приложения создание потока, в котором задача может выполняться, компилятор создает его, T1 выполняет свою обработку, а затем компилятор уничтожает его. Теперь T2 должен обработать, те же процессы происходят снова. Общее время вычислений выглядит следующим образом:
t(T1)+t(T2)+2*creationTimeOfThread+2*destructionTimeOfThreadt(T1) + t(T2) + 2 * createTimeOfThread + 2 * DestructionTimeOfThreadt(T1)+t( T2)+2∗созданиеTimeOfThread+2∗уничтожениеTimeOfThread
Если потоки были созданы заранее, и мы не уничтожаем их после использования, а возвращаем в пул, мы можем сэкономить много времени вычислений.
Архитектура пула потоков
На следующей диаграмме показано, как работает пул потоков.
В пуле 3 потока: T1, T2 и T3.
Service1 и Service2 запрашивают поток из пула потоков, и им выделяются потоки T1 и T2 соответственно
Service3 завершил свой запрос и готов вернуть поток T3 в пул
У службы 4 есть запрос, но, поскольку в пуле нет доступных потоков, его запрос не может быть обслужен. Запрос будет помещен в очередь ожидания
Пул потоков в Java
В Java пул потоков создается с помощью ExecutorService
ExecutorService executorService = Executors.newFixedThreadPool(3)
Это создаст пул из 3 потоков
С помощью функции execute() можно запросить поток из executorService
класс TaskThread реализует Runnable { публичный недействительный запуск () { // Выполнять работу() } } Запускаемый taskThread = новый TaskThread() executorService. execute(taskThread)
Идеальный пул потоков
Сколько потоков должно присутствовать в пуле? Давайте сначала разберемся с крайними случаями
- Если мы создадим много потоков в пуле, мы столкнемся с высоким использованием памяти и снижением производительности приложения
- Если мы создадим слишком мало потоков, мы не получим преимущества использования пула потоков
В Java есть интересный способ создания пула потоков с помощью Executors.newChachedThreadPool(). Эта реализация создает начальный пул из нулевых потоков, всякий раз, когда возникает потребность, создаются и добавляются в пул дополнительные потоки. Потоки, которые простаивают более 60 секунд, удаляются из пула
Можно управлять такими параметрами, как количество потоков в пуле, TTL неактивных потоков. Мы можем создать экземпляр пула с начальным количеством потоков, и при необходимости дополнительные потоки будут создаваться динамически
Как узнать количество начальных потоков?
Существует формула для вычисления идеального количества потоков, которое должно быть в вашем пуле:
Количество потоков = количество доступных ядер*(1+время ожидания/время обслуживания)Количество потоков = количество доступных ядер * (1 + время ожидания/время обслуживания)Количество потоков =NumberofAvailableCores*(1+Waittime/Servicetime)
Время ожидания: общее время, затрачиваемое на отсутствие обработки, например операции ввода-вывода, сетевые вызовы Время обслуживания: Фактическое время обработки
Например, в четырехъядерном ЦП, если микрослужба тратит 500 мс на операции ввода-вывода и 50 мс на фактические вычисления,
numberOfhreads=4∗(1+500/50)=44numberOfhreads = 4 * (1 + 500/50) = 44numberOfhreads=4*(1+500/50)=44
Заключение
- Пулы потоков позволяют создавать несколько потоков при запуске приложения
- Пул потоков управляет созданием, размещением и уничтожением потоков
- В Java есть класс ExecutorService, который управляет пулами потоков
- Пользователь может контролировать, сколько потоков может присутствовать в пуле потоков, используя Executors. newChachedThreadPool() реализацию ExecutorService
- Не следует создавать много потоков в пуле, это приведет к повышенному использованию памяти и снижению производительности в целом. Это также может повлиять на время запуска приложения .
- Как правило, мы можем использовать формулу Количество потоков = количество доступных ядер * (1 + время ожидания / время обслуживания) для расчета количества потоков, необходимых в пуле
Время испытаний!
Время проверить свои навыки и выиграть награды!
Примечание. Награды будут начислены после следующего обновления продукта.
Пулы потоков — приложения Win32
Редактировать
Твиттер LinkedIn Фейсбук Эл. адрес
- Статья
- 4 минуты на чтение
Пул потоков — это набор рабочих потоков, которые эффективно выполняют асинхронные обратные вызовы от имени приложения. Пул потоков в основном используется для уменьшения количества потоков приложений и обеспечения управления рабочими потоками. Приложения могут ставить рабочие элементы в очередь, связывать работу с дескрипторами ожидания, автоматически ставить в очередь на основе таймера и связываться с вводом-выводом.
Архитектура пула потоков
Следующие приложения могут извлечь выгоду из использования пула потоков:
- Приложение с высоким уровнем параллелизма, которое может асинхронно отправлять большое количество небольших рабочих элементов (например, поиск по распределенному индексу или сетевой ввод-вывод). .
- Приложение, которое создает и уничтожает большое количество потоков, каждый из которых выполняется в течение короткого времени. Использование пула потоков может уменьшить сложность управления потоками и накладные расходы, связанные с созданием и уничтожением потоков.
- Приложение, которое обрабатывает независимые рабочие элементы в фоновом режиме и параллельно (например, загрузка нескольких вкладок).
- Приложение, которое должно выполнять монопольное ожидание объектов ядра или блокировать входящие события для объекта. Использование пула потоков может упростить управление потоками и повысить производительность за счет уменьшения количества переключений контекста.
- Приложение, которое создает пользовательские потоки ожидания для ожидания событий.
Исходный пул потоков был полностью изменен в Windows Vista. Новый пул потоков улучшен, поскольку он предоставляет один тип рабочего потока (поддерживает как ввод-вывод, так и не ввод-вывод), не использует поток таймера, предоставляет единую очередь таймера и предоставляет выделенный постоянный поток. Он также предоставляет группы очистки, более высокую производительность, несколько пулов для каждого процесса, которые планируются независимо, и новый API пула потоков.
Архитектура пула потоков состоит из следующего:
- Рабочие потоки, выполняющие функции обратного вызова
- Потоки ожидания, ожидающие нескольких дескрипторов ожидания
- Рабочая очередь
- Пул потоков по умолчанию для каждого процесса
- Рабочая фабрика, управляющая рабочими потоками
Передовой опыт
Новый API пула потоков обеспечивает большую гибкость и контроль, чем исходный API пула потоков. Однако есть несколько тонких, но важных отличий. В исходном API сброс ожидания был автоматическим; в новом API ожидание должно каждый раз явно сбрасываться. Исходный API автоматически обрабатывал олицетворение, передавая контекст безопасности вызывающего процесса потоку. В новом API приложение должно явно задавать контекст безопасности.
Ниже приведены рекомендации по использованию пула потоков:
Потоки процесса совместно используют пул потоков. Один рабочий поток может выполнять несколько функций обратного вызова по одной за раз. Эти рабочие потоки управляются пулом потоков. Поэтому не завершайте поток из пула потоков, вызывая TerminateThread в потоке или вызывая ExitThread из функции обратного вызова.
Запрос ввода-вывода может выполняться в любом потоке в пуле потоков. Для отмены ввода-вывода в потоке пула потоков требуется синхронизация, поскольку функция отмены может выполняться в потоке, отличном от того, который обрабатывает запрос ввода-вывода, что может привести к отмене неизвестной операции. Чтобы избежать этого, всегда предоставляйте OVERLAPPED Структура, с которой был инициирован запрос ввода-вывода при вызове CancelIoEx для асинхронного ввода-вывода, или используйте собственную синхронизацию, чтобы убедиться, что никакой другой ввод-вывод не может быть запущен в целевом потоке до вызова CancelSynchronousIo или Функция CancelIoEx .
Очистите все ресурсы, созданные в функции обратного вызова, перед возвратом из функции. К ним относятся TLS, контексты безопасности, приоритет потока и регистрация COM. Функции обратного вызова также должны восстанавливать состояние потока перед возвратом.
Сохранять дескрипторы ожидания и связанные с ними объекты до тех пор, пока пул потоков не просигнализирует о завершении работы с дескриптором.
Отметьте все потоки, ожидающие длительных операций (например, очистку ввода-вывода или очистку ресурсов), чтобы пул потоков мог выделить новые потоки, а не ждать этого.
Перед выгрузкой библиотеки DLL, использующей пул потоков, отмените все рабочие элементы, ввод-вывод, операции ожидания и таймеры и дождитесь завершения выполнения обратных вызовов.
Избегайте взаимоблокировок, устраняя зависимости между рабочими элементами и между обратными вызовами, гарантируя, что обратный вызов не ожидает своего завершения, и сохраняя приоритет потока.
Не ставьте в очередь слишком много элементов слишком быстро в процессе с другими компонентами, использующими пул потоков по умолчанию. Для каждого процесса существует один пул потоков по умолчанию, включая Svchost.exe. По умолчанию каждый пул потоков имеет не более 500 рабочих потоков. Пул потоков пытается создать дополнительные рабочие потоки, когда количество рабочих потоков в состоянии готовности/выполнения должно быть меньше количества процессоров.
Избегайте однопотоковой модели апартамента COM, так как она несовместима с пулом потоков. STA создает состояние потока, которое может повлиять на следующий рабочий элемент для потока. STA, как правило, долгоживущий и имеет сходство потоков, что противоположно пулу потоков.
Создайте новый пул потоков для управления приоритетом и изоляцией потоков, создания настраиваемых характеристик и, возможно, повышения скорости отклика. Однако для дополнительных пулов потоков требуется больше системных ресурсов (потоки, память ядра). Слишком большое количество пулов увеличивает вероятность конкуренции за ЦП.
Если возможно, используйте ожидаемый объект вместо механизма на основе APC для сигнализации потока пула потоков. APC не так хорошо работают с потоками пула потоков, как другие механизмы сигнализации, поскольку система контролирует время жизни потоков пула потоков, поэтому поток может быть завершен до доставки уведомления.
Используйте расширение отладчика пула потоков, !tp. Эта команда имеет следующее использование:
- пул адрес флаги
- объект адрес флаги
- tqueue адрес флаги
- официант адрес
- рабочий адрес
Для пула, официанта и рабочего, если адрес равен нулю, команда выгружает все объекты. Для официанта и рабочего отсутствие адреса приводит к сбросу текущего потока. Определены следующие флаги: 0x1 (однострочный вывод), 0x2 (члены дампа) и 0x4 (дамп рабочей очереди пула).
API пула потоков
Использование функций пула потоков
S.No | Interview Question | Number of times has been asked | |||||||
---|---|---|---|---|---|---|---|---|---|
1 | Delete a node in doubly linked list | 2847 | |||||||
2 | Java program to find the number of Узлы в двоичном дереве | 2515 | |||||||
3 | Перевернуть строку без изменения специальных символов | 2483 | |||||||
4 | 0313 | 2265 | |||||||
5 | УДАЛИТЬ Узел связанного списка в данной позиции | 1990 | |||||||
6 | СОДЕРЖАНИЯ В СПИСОК В СПИСОК В СПИСОК В СПИСКОМ СПИСЕМ В СПИСКОВОЙ СОДЕЛЕНИЕ В СПИСКОНАМИ СОЗДАНИИ. | 7 | Найти элементы пары из массива, сумма которой равна номеру | 1662 | |||||
8 | Сортируемые элементы по частоте ног -нянь.0312 Quick Sort | 1632 | |||||||
10 | Напишите программу для печати всех перестановки | 1622 | |||||||
11 | . 12Создайте вдваированный список | 1458 | |||||||
13 | Реверс Array | 1431 | |||||||
14 | |||||||||
.0313 | 1407 | ||||||||
15 | Recursively remove all adjacent duplicates | 1372 | |||||||
16 | Find a Triplet That Sum to a Given Value | 1367 | |||||||
17 | First Repeating Element | 1356 | |||||||
18 | Упорядочить четные и нечетные числа так, чтобы нечетные шли после четных0312 1330 | ||||||||
20 | Smallest Positive Number Missing in an Unsorted Array | 1297 | |||||||
21 | Check if the Elements of an Array are Consecutive | 1264 | |||||||
22 | Detect a loop in Связанный список | 1249 | |||||||
23 | Непрерывный подмассив с наибольшей суммой | 1235 | |||||||
310312 1230 | |||||||||
25 | Subarray с данной суммой | 1225 | |||||||
26 | . Все возможные комбинации r Elements в данном сельском ассортименте | . выполнить поиск подстроки | 1213 | ||||||
28 | Найти максимальное повторяющееся число в массиве | 1176 | |||||||
29 | vers0313 | 1134 | |||||||
30 | Find the First and Second Smallest Elements | 1129 | |||||||
31 | Check if two linked lists are identical | 1118 | |||||||
32 | Maximum Subarray Sum using Divide and Conquer | 1115 | |||||||
33 | Удалить символы из первой строки, которые находятся во второй0313 | 1069 | |||||||
35 | Swap nodes in the linked list | 1050 | |||||||
36 | Find the Number Occurring Odd Number of Times in an Array | 1012 | |||||||
37 | Arrange given Numbers составить наибольшее число II | 1004 | |||||||
38 | найти второй по частоте символ0313 | 984 | |||||||
40 | Find Triplet in Array With a Given Sum | 973 | |||||||
41 | Total number of occurrences of a given item in the linked list | 964 | |||||||
42 | Для данного отсортированного массива и числа x найдите пару в массиве, сумма которых ближе всего к x62 | ||||||||
44 | Print all possible words from phone digits | 945 | |||||||
45 | Find the Missing Number | 936 | |||||||
46 | Rearrange Positive and Negative Numbers Alternatively in Array | 928 | |||||||
47 | Самая длинная палиндромная подстрока | 912 | |||||||
48 | Разделение четных и нечетных узлов в связанном списке | 01 | |||||||
49 | Print Longest common subsequence | 894 | |||||||
50 | Union and Intersection of Two Linked Lists | 883 | |||||||
51 | Transform one string to another using minimum number заданных операций | 883 | |||||||
52 | Проверить, может ли переставленная строка образовывать палиндром | 864 | |||||||
53 | 0313 | 855 | |||||||
54 | Iterative Implementation of Quick Sort | 844 | |||||||
55 | Insertion Sort | 835 | |||||||
56 | Count Possible Triangles | 833 | |||||||
57 | Умножение двух матриц. | Check if the linked list is palindrome | 804 | ||||||
60 | Rotate a Linked List | 803 | |||||||
61 | Stock Buy Sell to Maximize Profit | 801 | |||||||
62 | Concatenation из двух строк | 773 | |||||||
63 | Перетягивание каната | 771 | |||||||
64 | Подсчет K символов с 9 различными подстроками0313 | 766 | |||||||
65 | Print all duplicates in the input string | 765 | |||||||
66 | Find Nearest Greater and Smaller Element | 758 | |||||||
67 | The Celebrity Problem | 752 | |||||||
68 | Обратная строка без временной переменной | 749 | |||||||
69 | Поиск пифагорейских троек из массива | 336 | |||||||
70 | Удалите ‘B’ и ‘AC’ из данной строки | 744 | |||||||
71 | Найти все общие элементы в трех отсортированных массиве | 7369 | . в несортированном связанном списке | 719 | |||||
73 | Найти строку с максимальным числом единиц | 715 | |||||||
74 | 93 Найти 3 элемент Array 9|||||||||
75 | Find the subarray whose sum is equal to a given number X | 708 | |||||||
76 | Remove Minimum Characters so that Two Strings Become Anagrams | 704 | |||||||
77 | Найти наименьшее пропущенное число в отсортированном массиве0313 | 695 | |||||||
80 | Generate all Binary Strings Without Consecutive 1’s | 692 | |||||||
81 | Implement Two Stacks in an Array | 686 | |||||||
82 | Maximum Sum of Non Consecutive Elements | 684 | |||||||
83 | Подмассив максимального произведения II | 670 | |||||||
84 | 9712 Лексикографический ранг строки 90 1 3 3 123 60 3|||||||||
85 | Check if Two given Matrices are Identical | 659 | |||||||
86 | Multiplication of Previous and Next | 657 | |||||||
87 | Subtraction of Two Matrices | 648 | |||||||
88 | Объединить K отсортированные массивы и вывести отсортированный вывод | 643 | |||||||
89 | Переместить все нули в конец заданного массива | 642 | |||||||
90 | Divide a string in N equal parts | 638 | |||||||
91 | Online Algorithm for Checking Palindrome in a Stream | 638 | |||||||
92 | Form Minimum Number from Given Sequence of D’s and I’s | 634 | |||||||
93 | Проверить, являются ли две строки анаграммами друг друга0313 | 625 | |||||||
95 | Sort a stack using a temporary stack | 620 | |||||||
96 | Maximum Circular Subarray Sum | 620 | |||||||
97 | Sort a linked list that is sorted alternating ascending и по убыванию | 620 | |||||||
98 | Найти минимальный элемент в отсортированном и повернутом массиве | 613 | |||||||
Subarray и последующая | 612 | ||||||||
100 | .102 | Самый большой подмассив с одинаковым количеством нулей и единиц | 605 | ||||||
103 | Сравнить две строки (связанные списки) | 103 | |||||||
Flattening a linked list | 601 | ||||||||
105 | Maximum Element in an Array which is Increasing and then Decreasing | 601 | |||||||
106 | Palindrome Permutations of a String | 598 | |||||||
107 | Элемент большинства | 590 | |||||||
108 | Элементы появляются в массиве более N/K раз | 590 | Palindromes in a given range | 589 | |||||
110 | Minimum insertions to form a shortest palindrome | 589 | |||||||
111 | Run length encoding | 589 | |||||||
112 | Print all permutations с повторением | 586 | |||||||
113 | Проверка Pangram | 585 | |||||||
114 | Минимальное количество символов, которое нужно добавить в строку Front Palindrome0313 | 576 | |||||||
115 | Most repeating character in a string | 576 | |||||||
116 | Rotate string to get lexicographically minimum string | 575 | |||||||
117 | Remove all duplicates in a sorted linked список | 574 | |||||||
118 | Объединить связанный список в другой в альтернативных позициях0313 | 574 | |||||||
120 | Repeated Subsequence of Length Two or More | 572 | |||||||
121 | Minimum number of Merge Operations to make an Array Palindrome | 569 | |||||||
122 | Print all anagrams вместе в последовательности слов | 563 | |||||||
123 | Переупорядочить массив в соответствии с заданными индексами | 559 | |||||||
124 | 3Sum Leetcode Solution | 558 | |||||||
125 | Two Sum Leetcode Solution | 558 | |||||||
126 | Pancake Sorting Problem | 554 | |||||||
127 | Merge Overlapping Intervals II | 549 | |||||||
128 | Клонировать связанный список со следующим и случайным указателем | 546 | |||||||
129 | Размер подмассива с максимальной суммой | 537 | |||||||
130 | Transpose of a Matrix | 537 | |||||||
131 | Remove Extra Spaces from a String | 536 | |||||||
132 | Removing Spaces from a String using stringstream | 535 | |||||||
133 | Удалить дубликаты из строки | 534 | |||||||
134 | Максимальная сумма возрастающих подпоследовательностей | ||||||||
135 | Smallest Palindrome after Replacement | 533 | |||||||
136 | Check if a given string is a rotation of a palindrome | 533 | |||||||
137 | Partition Problem | 530 | |||||||
138 | Самый длинный палиндром может быть образован путем удаления или перестановки символов | 529 | |||||||
139 | Генерация всех двоичных строк из заданного шаблона | 518 | |||||||
140 | Check whether Strings are K Distance Apart or Not | 516 | |||||||
141 | Length of Longest valid Substring | 512 | |||||||
142 | Find Zeros to be Flipped so что число последовательных единиц максимально | 511 | |||||||
143 | Удалить последнее вхождение | 511 | |||||||
144 | |||||||||
508 | |||||||||
145 | Проверьте, являются ли две приведенные строки изоморфны для каждой остальной | 506 | |||||||
146 | Максимум между двумя элементами. | Программа для переключения всех символов в строке | 501 | ||||||
148 | Данная строка представляет собой чередование двух других строк или нет | 496 | |||||||
149 | Count Minimum Steps to Get the given Array | 492 | |||||||
150 | Merge sort better than quick sort for linked lists | 487 | |||||||
151 | Find Pair with Заданная разница | 487 | |||||||
152 | Число меньших элементов справа | 487 | |||||||
153 | Проверка числа, равного 153 | , длина строки a равна | 485 | ||||||
154 | Check if all Rows of a Matrix are Circular Rotations of Each Other | 483 | |||||||
155 | Longest Common Prefix using Divide and Conquer | 482 | |||||||
156 | Найти n-й узел связанного списка с конца. 0313 | 471 | |||||||
159 | Sort 0s 1s and 2s in an Array | 471 | |||||||
160 | Find a Fixed Point in a Given Array | 470 | |||||||
161 | Reverse words in a Приведенная строка | 467 | |||||||
162 | Массив повторного заказа с использованием заданных индексов | 466 | |||||||
163 | Медиана из двух сортированных ARRAY0310 | ||||||||
164 | Найти субрай с данной длиной с наименьшим средним | 464 | |||||||
165 | СРЕДЕЙ ДВА Сортированные СПИСОВЫЕ СПОСОБА. строки (рекурсия) | 464 | |||||||
167 | Разделить связанный список с использованием альтернативных узлов0313 | 448 | |||||||
169 | Find Element Using Binary Search in Sorted Array | 446 | |||||||
170 | Print all Palindromic Partitions of a String | 443 | |||||||
171 | Swap Kth Node from beginning с K-м узлом от конца | 443 | |||||||
172 | Найти подмассив длины K максимального среднего0313 | 434 | |||||||
174 | print all palindromic partitions | 430 | |||||||
175 | Shortest Superstring Problem | 429 | |||||||
176 | Maximum Length of Chain Pairs | 426 | |||||||
177 | Сведение многоуровневого связанного списка | 426 | |||||||
178 | Проверка, соответствует ли строка порядку символов по шаблону или нет | 425 | |||||||
179 | Sorting a K Sorted Array | 421 | |||||||
180 | Sort a String According to Another String | 418 | |||||||
181 | Longest Span with same Sum in two Binary Arrays II | 408 | |||||||
182 | Найдите отсортированную последующую подпоследовательность размера 3 | 406 | |||||||
183 | Обратный список. 0313 | ||||||||
184 | Рекурсивно печатайте все предложения, которые можно сформировать из списка слов | 403 | |||||||
185 | Программа добавить два бинарных цифр | . Числа с нечетными вхождениями в несортированном массиве | 399 | ||||||
187 | Самый длинный общий префикс с использованием двоичного поиска II | 399 | |||||||
0312 Reverse a Singly Linked List (Iterative/Non-Recursive) | 396 | ||||||||
189 | Kth Non-repeating Character | 393 | |||||||
190 | Caesar Cipher | 393 | |||||||
191 | Переупорядочить связанный список в Zig-Zag | 390 | |||||||
192 | Проверить, может ли строка стать пустой путем рекурсивного удаления данной подстроки | 389 | |||||||
Pancake Sorting | 385 | ||||||||
194 | Longest Common Prefix Word by Word Matching | 383 | |||||||
195 | Rotate Image by 90 degrees | 382 | |||||||
196 | Permutations of a Given Строка с использованием STL | 380 | |||||||
197 | Идеальная обратимая строка | 378 | |||||||
198 | MERED | ||||||||
198 | MERED | ||||||||
198 | MEREDENG | ||||||||
198 | . 0313 | 375 | |||||||
199 | Find First non-repeating character in a string | 374 | |||||||
200 | Increasing Subsequence of Length three with Maximum Product | 373 | |||||||
201 | Find the point где монотонно возрастающая функция становится положительной в первый раз0303 | 203 | Sort a linked list with 0s, 1s and 2s | 369 | |||||
204 | List items containing all characters of a given word | 367 | |||||||
205 | Four Elements that Sum to Given | 367 | |||||||
206 | .0313362 | ||||||||
208 | Delete N nodes after M | 361 | |||||||
209 | Count Number of Occurrences in a Sorted Array | 358 | |||||||
210 | Palindrome string (number) | 355 | |||||||
211 | Минимум символов, которые необходимо удалить, чтобы сделать двоичную строку альтернативной | 354 | |||||||
212 | |||||||||
213 | Maximum occurring character in a string | 351 | |||||||
214 | Sorting the array of strings | 346 | |||||||
215 | Recursive Implementation of atoi() | 344 | |||||||
216 | Проверить, образует ли связанный список строк палиндром | 343 | |||||||
217 | Допустимые скобки0303 | 218 | Even Substring Count | 342 | |||||
219 | Convert a String that is Repetition of a Substring of Length K | 342 | |||||||
220 | Print All Distinct Elements of the Array | 341 | |||||||
221 | Найти первое повторяющееся число в заданном массиве0313 | ||||||||
223 | Print Shortest Path to Print a String on Screen | 336 | |||||||
224 | Convert string1 to string2 in one edit | 333 | |||||||
225 | Nth Character in Concatenated Decimal String | 333 | |||||||
226 | Решение максимального подмассива Leetcode | 332 | |||||||
227 | Можем ли мы обратить связанный список менее чем за O(n) времени? | 331 | |||||||
228 | wildcard character matching | 330 | |||||||
229 | Count the number of words | 330 | |||||||
230 | Reverse a String using Stack | 330 | |||||||
231 | Двоичное дерево в двусвязный список | 329 | |||||||
232 | Нижний регистр в верхний регистр | 327 | |||||||
327 | |||||||||
234 | Merge Two Sorted Arrays | 322 | |||||||
235 | Find the Lost Element From a Duplicated Array | 322 | |||||||
236 | Split Four Отдельные строки | 319 | |||||||
237 | Найти середину связанного списка | 318 | |||||||
238 | Программирование Dynamic Chain Multitrix | 316 | |||||||
239 | Longest Common Subsequence with Permutations | 315 | |||||||
240 | Count the Pairs at Same Distance as in English Alphabets | 313 | |||||||
241 | Next Greater Element in an Массив | 306 | |||||||
242 | Преобразование из римского в целое число Литкод Решение | 303 | |||||||
243 | Перестановка | 0312 300 | |||||||
244 | Find Nth Node | 295 | |||||||
245 | Find All Pairs With a Given Difference | 295 | |||||||
246 | Searching a node in a Binary Search Tree | 293 | |||||||
247 | String(represents an integer) to value | 290 | |||||||
248 | Delete a Tree | 290 | |||||||
249 | Reverse a String | 289 | |||||||
250 | Toeplitz Matrix | 289 | |||||||
251 | Triplet from three linked lists with given sum | 289 | |||||||
252 | Print all Possible Способы разорвать строку в форме скобок | 288 | |||||||
253 | Поиск по слову Решение Leetcode | 288 | |||||||
254 Обратные биты | 3 | 0313 | 285 | ||||||
255 | Sort an array of strings | 285 | |||||||
256 | Delete a node under given conditions | 284 | |||||||
257 | N queen problem | 284 | |||||||
258 | Изменить пол данной строки | 284 | |||||||
259 | Как эффективно реализовать k стеков в одном массиве? | 283 | |||||||
260 | Count Pairs With Given Sum | 283 | |||||||
261 | Binary Tree | 282 | |||||||
262 | Number of sub-strings which recursively add up to 9 | 281 | |||||||
263 | Первый не повторяющийся элемент | 279 | |||||||
264 | Повторяющаяся подстроение | 279 | |||||||
265 | Номер. 0313278 | ||||||||
266 | Move all negative elements to one side of array | 277 | |||||||
267 | Longest Common Extension | 276 | |||||||
268 | Meeting Rooms II LeetCode Solution | 276 | |||||||
269 | Минимальный стек | 275 | |||||||
270 | Удаление средних точек в связанном списке отрезков | 3174 | |||||||
271 | Remove spaces from a string | 273 | |||||||
272 | Longest Palindromic Substring LeetCode Solution | 273 | |||||||
273 | Shuffle a given Array | 272 | |||||||
274 | Алгоритм Дейкстры | 266 | |||||||
275 | Числа Фибоначчи | 266 | |||||||
276 | 0313 | 266 | |||||||
277 | Cuckoo sequence program | 265 | |||||||
278 | Find, second, frequent, character | 265 | |||||||
279 | House Robber Leetcode Solution | 264 | |||||||
280 | Свести к минимуму максимальную разницу высот | 264 | |||||||
281 | Макс. стопка | 262 | Sudoku Solver | 262 | |||||
283 | Word Search | 261 | |||||||
284 | KMP Algorithm | 257 | |||||||
285 | Expression Evaluation | 256 | |||||||
286 | Сортировка по абсолютным значениям | 256 | |||||||
287 | Подмножество Leetcode | 255 | |||||||
288 | Search Position Insert | Search Solution | 0313 | 255 | |||||
289 | Number Of 1 bits | 254 | |||||||
290 | Clone a linked list with next and random pointer (Hashing) | 254 | |||||||
291 | Evaluation of Postfix Expression | 253 | |||||||
292 | Обратные слова по строке | 252 | |||||||
293 | плюс один раствор Leetcode | 252 252 | плюс один раствор Leetcode | 252 252 252 | плюс один раствор Leetcode | 252 252 252 252 | плюс один Leetcode Dolid0312 294 | Valid Palindrome Leetcode Solution | 252 |
295 | Combination Sum Leetcode Solution | 252 | |||||||
296 | Min Stack Leetcode Solution | 250 | |||||||
297 | Merge Отсортированные массивы Решение Leetcode | 247 | |||||||
298 | Как удалить связанный список | 246 | |||||||
299 | Backspace String Compare | 246 | |||||||
300 | Subarray with 0 sum | 245 | |||||||
301 | Rabin Karp Algorithm | 243 | |||||||
302 | Set Matrix Zeroes | 242 | |||||||
303 | Пара положительных и отрицательных значений в массиве | 242 | |||||||
304 | Общие элементы во всех строках данной матрицы | 242 | |||||||
305 | Reversing a Queue | 240 | |||||||
306 | Sqrt(x) Leetcode Solution | 239 | |||||||
307 | Delete middle element of a stack | 237 | |||||||
308 | Пересечение двух массивов II Решение литкода | 237 | |||||||
309 | Комбинация Сумма | 237 | |||||||
3120313 | 237 | ||||||||
311 | Contains Duplicate II Leetcode Solution | 237 | |||||||
312 | Pascal Triangle Leetcode | 236 | |||||||
313 | Product of array except self | 235 | |||||||
314 | Количество пар индексов с одинаковыми элементами в массиве | 235 | |||||||
315 | Содержит повторяющиеся | 234 | |||||||
316 | Reverse individual words | 234 | |||||||
317 | Find Top K (or Most Frequent) Numbers in a Stream | 233 | |||||||
318 | Integer to Roman Leetcode Solution | 233 | |||||||
319 | Минимум перестановок, необходимых для объединения всех элементов, меньших или равных k0313 | ||||||||
321 | Page Replacement Algorithms in Operating Systems | 232 | |||||||
322 | String Compression | 232 | |||||||
323 | Sliding Window Technique | 230 | |||||||
324 | Count Odd Числа в интервальном диапазоне Решение Leetcode | 230 | |||||||
325 | Подсчет подмассивов с одинаковым количеством единиц и нулей | 230 | |||||||
326 | Single Number Leetcode Solution | 229 | |||||||
327 | Implementation of Deque using Doubly Linked List | 229 | |||||||
328 | Bellman Ford Algorithm | 228 | |||||||
329 | Добавление двоичного решения Leetcode | 228 | |||||||
330 | Построение двоичного дерева из заданных обходов в прямом и прямом порядке | 228 | |||||||
331 | Postfix to Infix Conversion | 226 | |||||||
332 | Minimum Value to Get Positive Step by Step Sum Leetcode Solution | 226 | |||||||
333 | Second Most Repeated Word in a Sequence | 226 | |||||||
334 | Сгруппировать слова с одинаковым набором символов0313 | ||||||||
336 | Arithmetic Expression Evaluation | 226 | |||||||
337 | Palindrome Linked List Leetcode Solution | 225 | |||||||
338 | Find sum of non-repeating elements (distinct) elements in an array | 225 | |||||||
339 | Next Permutation | 225 | |||||||
340 | Kruskal Algorithm | 225 | |||||||
341 | Maximum Number of Balloons Leetcode Solution | 224 | |||||||
342 | Sum of minimum and maximum elements of all subarrays of size k | 224 | |||||||
343 | Sort elements by frequency | 224 | |||||||
344 | K-й наименьший элемент в отсортированной матрице0313 | 223 | |||||||
346 | Minimum operation to make all elements equal in array | 222 | |||||||
347 | Given two unsorted arrays find all pairs whose sum is x | 221 | |||||||
348 | Сортировочный массив с использованием стеков | 221 | |||||||
349 | Решение для лечения мажорита | 220 | |||||||
350 | Scramble String String String String String String String String String String String String String String String String String String String String String String String String String String String String String Strting | 13131313131313String String String String String | 131313. 0313 | ||||||
351 | Longest Common Prefix Leetcode Solution | 220 | |||||||
352 | Permutations Leetcode Solution | 220 | |||||||
353 | Find Lucky Integer in an Array Leetcode Solution | 220 | |||||||
354 | Алгоритм выпуклой оболочки | 219 | |||||||
355 | Подсчет подмассивов, в которых общее количество различных элементов совпадает с исходным массивом | 219 | |||||||
356 | Smallest Subarray with k Distinct Numbers | 219 | |||||||
357 | Top K Frequent Words | 219 | |||||||
358 | Longest Substring Without Repeating Characters LeetCode Solution | 218 | |||||||
359 | Оценить подразделение | 218 | |||||||
360 | Максимальный подмассив | 217 | 3 | Third Maximum Number Leetcode Solution | 217 | ||||
362 | First element occurring k times in an array | 216 | |||||||
363 | Prefix to Infix Conversion | 216 | |||||||
364 | Special Число | 216 | |||||||
365 | Поиск чисел с четным числом цифр Решение лит-кода | 216 | |||||||
366 | 366 | 0313 | 215 | ||||||
367 | Spiral Matrix LeetCode Solution | 215 | |||||||
368 | Find the Town Judge Leetcode Solution | 215 | |||||||
369 | Check if two arrays are equal or not | 215 | |||||||
370 | Количество хороших пар Решение Leetcode | 214 | |||||||
371 | Перестановка узлов в парах 9 2 3 903 11 Решение Leetcode | ||||||||
372 | Найти дубликаты в данном массиве, когда элементы не ограничены диапазоном | 213 | |||||||
373 | . Реверсирование первых K элементов очереди0312 213 | ||||||||
377 | Group Anagrams | 212 | |||||||
378 | Maximal Square | 211 | |||||||
379 | Missing Number Leetcode Solution | 211 | |||||||
380 | Reverse a Number Использование стека | 211 | |||||||
381 | Запрос сумм диапазона 2D – решение с неизменяемым литкодом | 211 | |||||||
382 | 30313 | 211 | |||||||
383 | Running Sum of 1d Array Leetcode Solution | 210 | |||||||
384 | Count Primes Leetcode Solutions | 210 | |||||||
385 | Minimum Absolute Difference Leetcode Solution | 210 | |||||||
386 | Треугольник Паскаля II Решение литкода | 209 | |||||||
387 | Top K Frequent Elements | 209 | |||||||
388 | Single Number | 209 | |||||||
389 | Sorting using trivial hash function | 209 | |||||||
390 | Merge Two Sorted Lists Leetcode Solutions | 209 | |||||||
391 | Максимальное расстояние между двумя вхождениями одного и того же элемента в массиве | 208 | |||||||
392 | Найти все числа, исчезнувшие в массиве Решение Leetcode | 208 | |||||||
393 | Palindrome Substring Queries | 208 | |||||||
394 | Power of Two Leetcode Solution | 208 | |||||||
395 | Find the Closest Palindrome number | 208 | |||||||
396 | Сортировка массива по возрастанию частоты Решение литкода | 208 | |||||||
397 | Совокупная частота подсчета каждого элемента в несортированном массиве | 207 | |||||||
398 | Best Time to Buy and Sell Stock II Leetcode Solution | 207 | |||||||
399 | Convert String To Int | 207 | |||||||
400 | Find Minimum In Rotated Sorted Array | 207 | |||||||
401 | Проблема суммы подмножеств0312 206 | ||||||||
403 | Matrix Diagonal Sum Leetcode Solution | 206 | |||||||
404 | Unique Paths | 206 | |||||||
405 | House Robber II Leetcode Solution | 206 | |||||||
406 | Реализовать стек и очередь с помощью Deque | 206 | |||||||
407 | Проверить, содержит ли массив непрерывные целые числа с разрешенными дубликатами | 206 | |||||||
408 | Coin Change 2 Leetcode Solution | 205 | |||||||
409 | Letter Case Permutation | 205 | |||||||
410 | Subarray Sum Equals k | 205 | |||||||
411 | Subarray Сумма равна K Решение LeetCode | 205 | |||||||
412 | Перестановки Leetcode | 205 | |||||||
413 | 3 | 3 Двудольный граф0313 | 205 | ||||||
414 | Zigzag Conversion | 205 | |||||||
415 | Maximum Depth of Binary Tree Leetcode Solution | 205 | |||||||
416 | Search in Rotated Sorted Array Leetcode Solution | 205 | |||||||
417 | Средняя заработная плата без учета минимальной и максимальной заработной платы Решение | 205 | |||||||
418 | Найдите три первых повторения в массиве | 205 | |||||||
419 | Expression Contains Redundant Bracket or Not | 204 | |||||||
420 | Find Number of Employees Under every Employee | 204 | |||||||
421 | Difference between highest and least frequencies in массив | 204 | |||||||
422 | Как реализовать стек с использованием приоритетной очереди или кучи? | 204 | |||||||
423 | Happy Number Leetcode Solution | 204 | |||||||
424 | Find Winner on a Tic Tac Toe Game Leetcode Solution | 204 | |||||||
425 | Unique Paths Leetcode Solution | 204 | |||||||
426 | Max Последовательные решения Leetcode | 203 | |||||||
427 | Найти медиану из потока данных0313 | 203 | |||||||
429 | Length of the largest subarray with contiguous elements | 203 | |||||||
430 | Print All Distinct Elements of a Given Integer Array | 203 | |||||||
431 | Smallest Element Repeated Exactly K Times | 203 | |||||||
432 | Лучшее время для покупки и продажи Stock III Решение Leetcode | 202 | |||||||
433 | Count Substrings with equal number of 0s, 1s and 2s | 202 | |||||||
434 | How Many Numbers Are Smaller Than the Current Number Leetcode Solution | 202 | |||||||
435 | Capacity To Ship Packages Within D Days Leetcode Solution | 201 | |||||||
436 | LRU Cache Implementation | 201 | |||||||
437 | Decode String | 201 | |||||||
438 | Check If N and Its Double Exist Leetcode Solution | 201 | |||||||
439 | Sort a stack using recursion | 201 | |||||||
440 | Count pairs from two linked lists whose sum is equal to Обращенное значение | 200 | |||||||
441 | Субары с различными элементами | 200 | |||||||
442 | |||||||||
442 | |||||||||
442 | |||||||||
442 | 442 | . 0313 | 200 | ||||||
443 | Nth Catalan Number | 200 | |||||||
444 | Fizz Buzz | 200 | |||||||
445 | Print all subarrays with 0 sum | 200 | |||||||
446 | Find The Duplicate Number | 199 | |||||||
447 | Reverse Vowels of a String Leetcode Solution | 199 | |||||||
448 | Monotonic Array LeetCode Solution | 199 | |||||||
449 | Remove Minimum Number of Elements Such That no Common Element Exist in both Array | 199 | |||||||
450 | Fibonacci Number LeetCode Solution | 199 | |||||||
451 | Reverse Integer | 199 | |||||||
452 | Удалить дубликаты из отсортированного массива0313 | 198 | |||||||
454 | Найдите все пары (A, B) в массиве, что A % B = K | 198 | |||||||
455 | Обратный А. Стек. 456 | Сгенерировать строку со символами, которые имеют нечетное количество LeetCode Solution | 197 | ||||||
457 | .0313 | 197 | |||||||
459 | Integer to English words | 197 | |||||||
460 | Prim’s Algorithm | 197 | |||||||
461 | Edit Distance | 197 | |||||||
462 | Flood Fill LeetCode | 196 | |||||||
463 | Сумма диапазонов подмассивов Leetcode Solution | 196 | |||||||
49 Обратное0312 196 | |||||||||
465 | Text Justification LeetCode Solution | 196 | |||||||
466 | Find Common Characters Leetcode Solution | 196 | |||||||
467 | Count and Say | 196 | |||||||
468 | Итеративная Ханойская башня | 195 | |||||||
469 | Самый длинный подмассив, не содержащий более K различных элементов | 195 | |||||||
470 | Delete a Node from linked list without head pointer | 195 | |||||||
471 | Priority Queue Using Singly Linked List | 195 | |||||||
472 | Reverse Words in a String III LeetCode Solution | 195 | |||||||
473 | K-й по величине элемент в массиве Leetcode Solutions | 195 | |||||||
474 | Обратный связанный список | 3 905 | |||||||
475 | Merge Two Sorted Linked Lists | 195 | |||||||
476 | MiniMax Algorithm | 195 | |||||||
477 | The K Weakest Rows in a Matrix Leetcode Solution | 195 | |||||||
478 | Найти отдельные элементы, общие для всех строк матрицы0312 480 | Prefix to Postfix Conversion | 194 | ||||||
481 | Find the Duplicate Element | 194 | |||||||
482 | Sorting a Queue without Extra Space | 194 | |||||||
483 | Find missing элементы диапазона | 193 | |||||||
484 | Степень массива | 193 | |||||||
485 | Итеративный неупорядоченный обход | 193 | |||||||
486 | Shuffle the Array Leetcode Solution | 193 | |||||||
487 | Word Ladder LeetCode Solution | 193 | |||||||
488 | Target Sum | 193 | |||||||
489 | Самый медленный ключ Решение Leetcode | 193 | |||||||
490 | Номер столбца листа Excel Решение Leetcode | 193 | |||||||
491 | Longest Common Subsequence | 193 | |||||||
492 | Shuffle String Leetcode Solution | 193 | |||||||
493 | Pair with given product | 193 | |||||||
494 | Find any one из нескольких повторяющихся элементов в массиве только для чтения | 192 | |||||||
495 | Сбалансированное решение литкода двоичного дерева | 192 | |||||||
496 | Найти первую и последнюю позицию элемента в решении LeetCode | ||||||||
497 | Найти разницу LeetCode Solution | 1 | . Значение (Hashmap)192 | ||||||
499 | Design Parking System Решение Leetcode | 192 | |||||||
500 | Вид Binary Top | 192 | |||||||
501 | Find Index of Closing Bracket for a Given Opening Bracket in an Expression | 192 | |||||||
502 | Multiply Strings Leetcode Solution | 192 | |||||||
503 | Valid Parenthesis String | 192 | |||||||
504 | Подстрока с конкатенацией всех слов0313 | 191 | |||||||
506 | Postfix to Prefix Conversion | 191 | |||||||
507 | Priority Queue in C++ | 191 | |||||||
508 | Shortest Palindrome | 191 | |||||||
509 | Объединение массивов LeetCode Solution | 190 | |||||||
510 | Объединение перекрывающихся интервалов | 190 | |||||||
511 | 30313 | 190 | |||||||
512 | Number of Steps to Reduce a Number to Zero Leetcode Solution | 190 | |||||||
513 | Next Greater Element I Leetcode Solution | 190 | |||||||
514 | Check if a заданный массив содержит повторяющиеся элементы на расстоянии k друг от друга0313 | 190 | |||||||
517 | The Stock Span Problem | 189 | |||||||
518 | Check for Balanced Parentheses in an Expression | 189 | |||||||
519 | Implement Stack using Queues | 189 | |||||||
520 | Максимальная площадь острова | 189 | |||||||
521 | K-й наибольший элемент в потоке0303 | 522 | Jump Game Leetcode Solution | 189 | |||||
523 | Kids With the Greatest Number of Candies Leetcode Solution | 189 | |||||||
524 | Minimum Moves to Equal Array Elements Leetcode Solution | 189 | |||||||
525 | Зигзагообразное преобразование Решение LeetCode | 189 | |||||||
526 | K-й отдельный элемент в массиве | 189 | |||||||
527 | Longest Common Prefix using Sorting | 188 | |||||||
528 | Move Zeroes LeetCode Solution | 188 | |||||||
529 | Intersection of Two Arrays | 188 | |||||||
530 | Преобразование двоичной строки в виде чередующихся вхождений x и y | 188 | |||||||
531 | Следующий элемент с большей частотой | 188 | |||||||
532 | Count number of triplets with product equal to given number | 188 | |||||||
533 | Convert array into Zig-Zag fashion | 188 | |||||||
534 | Shuffle an Array | 187 | |||||||
535 | Найдите N уникальных целых чисел, равных нулю0312 537 | Largest Sum Contiguous Subarray | 187 | ||||||
538 | Smallest Subarray With all Occurrences of a Most Frequent Element | 186 | |||||||
539 | Minimum Bracket Reversals | 186 | |||||||
540 | Удалить узел в связанном списке0303 | 542 | Mobile Numeric Keypad Problem | 186 | |||||
543 | Excel Sheet Column Title Leetcode Solution | 186 | |||||||
544 | Arrange given numbers to form the biggest number | 186 | |||||||
545 | Пиковый индекс в горном массиве | 186 | |||||||
546 | Преобразование обычного BST в сбалансированное BST | 186 | |||||||
547 | Last Stone Weight | 185 | |||||||
548 | Is Subsequence Leetcode Solution | 185 | |||||||
549 | Contiguous Array Leetcode | 185 | |||||||
550 | Sum of Left Leaves Leetcode Solutions | 185 | |||||||
551 | Длина последнего слова Leetcode Solution | 185 | |||||||
552 | Раздайте конфеты Leetcode Solution | 185 | |||||||
553 | Change the Array into Permutation of Numbers From 1 to N | 184 | |||||||
554 | Largest Perimeter Triangle Leetcode Solution | 184 | |||||||
555 | Gold Mine Problem | 184 | |||||||
556 | Изоморфные строки Решение LeetCode | 184 | |||||||
557 | Решение LeetCode | 184 | |||||||
558 | Linked List Cycle II LeetCode Solution | 184 | |||||||
559 | Hamming Distance | 184 | |||||||
560 | Group Multiple Occurrence of Array Elements Ordered by first Occurrence | 184 | |||||||
561 | Минимум операций удаления, чтобы сделать все элементы массива одинаковыми | 184 | |||||||
562 | 0313 | 184 | |||||||
563 | Find Sum of all unique sub-array sum for a given array | 183 | |||||||
564 | Koko Eating Bananas Leetcode Solution | 183 | |||||||
565 | How to проверить, не пересекаются ли два заданных множества? | 183 | |||||||
566 | Подсчет количества узлов на заданном уровне в дереве с использованием BFS0313 | 183 | |||||||
568 | Maximum path sum in a triangle | 182 | |||||||
569 | Combinations Leetcode Solution | 182 | |||||||
570 | Island Perimeter Leetcode Solution | 182 | |||||||
571 | Целое число в латинское | 182 | |||||||
572 | Первое отрицательное целое число в каждом окне размера k | 182 | |||||||
573 | Implementation of Deque using circular array | 182 | |||||||
574 | Summary Ranges Leetcode Solution | 182 | |||||||
575 | Find Words That Can Be Formed by Characters Leetcode Solution | 182 | |||||||
576 | Построить массив из перестановки Решение Leetcode | 182 | |||||||
577 | Назначить Cookies Решение Leetcode | 181 | |||||||
578 | 3Sum Closest LeetCode Solution | 181 | |||||||
579 | The Knapsack Problem | 181 | |||||||
580 | Jewels and Stones Leetcode Solution | 181 | |||||||
581 | Relative Сортировать Массив Лит-код Решение | 181 | |||||||
582 | Количество провинций Лит-код Решение | 181 | |||||||
583 | N-th Tribonacci Number Leetcode Solution | 181 | |||||||
584 | Maximum difference between first and last indexes of an element in array | 181 | |||||||
585 | Maximum sum rectangle in a 2D matrix | 180 | |||||||
586 | LRU Cache LeetCode Solution | 180 | |||||||
587 | Минимальное количество подмножеств с отдельными элементами | ||||||||
588 | Find if an Expression has Duplicate Parenthesis or Not | 180 | |||||||
589 | Shortest Path in a Grid with Obstacles Elimination LeetCode Solution | 180 | |||||||
590 | Decode Ways | 180 | |||||||
591 | 01 Matrix LeetCode Solution | 180 | |||||||
592 | Минимум операций для преобразования | 180 | |||||||
593 | Maximum Distance in Array | 180 | |||||||
594 | Sieve of Eratosthenes | 179 | |||||||
595 | Convert Sorted Array to Binary Search Tree Leetcode Solution | 179 | |||||||
596 | Удалить элементы связанного списка0313 | 179 | |||||||
598 | Longest Increasing Subsequence | 178 | |||||||
599 | Trapping Rain Water LeetCode Solution | 178 | |||||||
600 | Rotate Image LeetCode Solution | 178 | |||||||
601 | Найдите наименьшее целое положительное значение, которое не может быть представлено в виде суммы любого подмножества заданного массива | 178 | |||||||
602 | Bubble sort using two Stacks | 178 | |||||||
603 | Maximum Number of Occurrences of a Substring Leetcode Solution | 178 | |||||||
604 | Distance Between Bus Stops Leetcode Solution | 178 | |||||||
605 | Уникальные двоичные деревья поиска | 178 | |||||||
606 | Удаление всех вхождений подстроки Решение LeetCode | 177 | |||||||
607 | Sort Characters By Frequency LeetCode Solution | 177 | |||||||
608 | Rotate List Leetcode Solution | 177 | |||||||
609 | Insert Interval Leetcode Solution | 177 | |||||||
610 | Find минимальная разница между любыми двумя элементами | 177 | |||||||
611 | Same Tree LeetCode Solution | 177 | |||||||
612 | Минимальная стоимость найма K работников | 176 | |||||||
613 | Наименьшая хорошая база | 176 | |||||||
176 | |||||||||
614 9033 | 176 | ||||||||
615 | Word Pattern | 176 | |||||||
616 | XOR Operation in an Array Leetcode Solution | 176 | |||||||
617 | Minimum insertions to form a palindrome with permutations allowed | 176 | |||||||
618 | Check if a queue can be sorted into another queue using a stack | 176 | |||||||
619 | Iterative Method to find Height of Binary Tree | 176 | |||||||
620 | Обратный стек без использования дополнительного пространства в O (n) | 176 | |||||||
621 | Непересекающая сумма с двумя наборами | 175 | |||||||
6212 | |||||||||
6212 | . 0313175 | ||||||||
623 | Maximum Number of Chocolates to be Distributed Equally Among k Students | 175 | |||||||
624 | Frog Jump Leetcode Solution | 175 | |||||||
625 | Check If It Is a Решение Leetcode для прямой линии | 175 | |||||||
626 | Форматирование лицензионного ключа Решение Leetcode | 175 | |||||||
627 Максимальный текущий элемент стека | 0313 | 174 | |||||||
628 | Printing brackets in Matrix Chain Multiplication Problem | 174 | |||||||
629 | Isomorphic Strings | 174 | |||||||
630 | Delete consecutive same words in a sequence | 174 | |||||||
631 | Лучшее время для покупки и продажи акций Решение LeetCode | 174 | |||||||
632 | НОД двух чисел | 174 | |||||||
633 | Stone Game LeetCode | 174 | |||||||
634 | Permutation in String Leetcode Solution | 174 | |||||||
635 | Painting Fence Algorithm | 174 | |||||||
636 | Сортировка массива по четности Решение LeetCode | 174 | |||||||
637 | Определение IP-адреса Решение Leetcode | 173 | |||||||
638 | Maximum Consecutive Numbers Present in an Array | 173 | |||||||
639 | Reorganize String | 173 | |||||||
640 | Minimum Number of Steps to Make Two Strings Anagram Leetcode Solutions | 173 | |||||||
641 | K Пустые слоты LeetCode | 173 | |||||||
642 | Заменить элементы наибольшим элементом справа. Решение Leetcode | 173 | |||||||
643 | Find the Duplicate Number LeetCode Solution | 173 | |||||||
644 | Applications of Breadth First Search and Depth First Search | 173 | |||||||
645 | Word Wrap Problem | 173 | |||||||
646 | Проблема с раздачей монет | 173 | |||||||
647 | Уменьшение тарелок Решение LeetCode | 30310 | |||||||
648 | Form minimum number from given sequence | 172 | |||||||
649 | Optimal Account Balancing LeetCode Solution | 172 | |||||||
650 | Partition Labels LeetCode Solution | 172 | |||||||
651 | Расстояние до ближайшей ячейки с 1 в двоичной матрице | 172 | |||||||
652 | Сумма f(a[i], a[j]) по всем парам в массиве из n целых чисел | 172 | |||||||
653 | House Robber | 172 | |||||||
654 | Find Maximum Level sum in Binary Tree | 172 | |||||||
655 | Find Largest d in Array such that a + b + c = D | 172 | |||||||
656 | Слияние Два сбалансированных бинарных поисковых деревье0313 | ||||||||
658 | Wiggle Sort | 171 | |||||||
659 | Convert an array to reduced form | 171 | |||||||
660 | Longest Substring with At Least K Repeating Characters LeetCode Solution | 171 | |||||||
661 | Найти значение расстояния между двумя массивами0313 | 171 | |||||||
663 | Strobogrammatic Number LeetCode Solution | 171 | |||||||
664 | Best Time to Buy and Sell Stock with Cooldown Leetcode Solution | 171 | |||||||
665 | Segregate 0s and 1s in Массив | 171 | |||||||
666 | Переворот изображения0312 170 | ||||||||
668 | Find pairs with given sum such that elements of pair are in different rows | 170 | |||||||
669 | Valid Perfect Square Leetcode Solution | 170 | |||||||
670 | Kth Missing Положительное число Решение LeetCode | 170 | |||||||
671 | Двоичное дерево Зигзагообразный порядок обхода порядка Решение LeetCode | 170 | |||||||
672 | K Empty Slots | 170 | |||||||
673 | Employee Free Time LeetCode Solution | 170 | |||||||
674 | Moving Average from Data Stream Leetcode Solution | 170 | |||||||
675 | Valid Palindrome II Решение LeetCode | 170 | |||||||
676 | Самый длинный возрастающий путь в матрице Решение LeetCode | 169 | |||||||
677 | Letter Combinations of a Phone Number | 169 | |||||||
678 | Valid Palindrome | 169 | |||||||
679 | Path With Maximum Minimum Value LeetCode Solution | 169 | |||||||
680 | Sum of All Odd Длина Подмассивы Leetcode Solution | 169 | |||||||
681 | В порядке следования узла в двоичном дереве | 169 | |||||||
682 | Longest Substring with At Most K Distinct Characters LeetCode Solution | 169 | |||||||
683 | Count Good Nodes in Binary Tree Leetcode Solution | 168 | |||||||
684 | Number of Dice Rolls With Target Sum LeetCode Solution | 168 | |||||||
685 | Первый уникальный символ в строке Решение LeetCode | 168 | |||||||
686 | В нижний регистр Решение Leetcode | 168 | |||||||
687 | Check If Two String Arrays are Equivalent Leetcode Solution | 168 | |||||||
688 | Recover Binary Search Tree | 168 | |||||||
689 | Find Leaves of Binary Tree LeetCode Solution | 168 | |||||||
690 | Удалить N-й узел с конца данного связанного списка | 168 | |||||||
691 | Find Pair with Greatest Product in Array | 168 | |||||||
692 | Rearrange an array in order – smallest, largest, 2nd smallest, 2nd largest | 168 | |||||||
693 | Find the node with minimum value in a Binary Search Tree | 168 | |||||||
694 | Unique Paths II Leetcode Solution | 168 | |||||||
695 | Subset Sum Leetcode | 167 | |||||||
696 | Find the Smallest Divisor given a Threshold Leetcode Solution | 167 | |||||||
697 | Edit Distance LeetCode Solution | 167 | |||||||
698 | Longest Span with same Sum in two Binary arrays | 167 | |||||||
699 | Разбиение массива на три части с решением равной суммы Leetcode0313 | 167 | |||||||
701 | Reverse Only Letters LeetCode Solution | 167 | |||||||
702 | Maximum Product of Two Elements in an Array Leetcode Solution | 167 | |||||||
703 | Sort Array by Increasing Frequency Решение Leetcode | 167 | |||||||
704 | Факториал в конце нулей Решение Leetcode | 166 | |||||||
705 Решение Leetcode Majority | Elementity0313 | 166 | |||||||
706 | Print the Fibonacci numbers in reverse order | 166 | |||||||
707 | Lucky Numbers in a Matrix Leetcode Solution | 166 | |||||||
708 | Largest subarray with equal number of 0s и 1s | 166 | |||||||
709 | Преобразование числа в шестнадцатеричный литкод Решение | 166 | |||||||
Решение Неверный код 9 Удалить 710 | |||||||||
166 | |||||||||
711 | Increasing Decreasing String Leetcode Solution | 166 | |||||||
712 | Find the largest multiple of 3 | 166 | |||||||
713 | String Compression LeetCode Solution | 166 | |||||||
714 | Основы динамического программирования | 166 | |||||||
715 | Реверсирование очереди с использованием рекурсии | 166 | |||||||
716 | Robot Room Cleaner Leetcode Solution | 166 | |||||||
717 | Permutation Sequence LeetCode Solution | 166 | |||||||
718 | Bulb Switcher LeetCode Solution | 165 | |||||||
719 | Non -убывающее Array LeetCode Solution | 165 | |||||||
720 | Stack Permutations (Проверить, является ли массив перестановкой стека другого) | 165 | |||||||
721 | Numbers with prime frequencies greater than or equal to k | 165 | |||||||
722 | Maximum Number of Coins You Can Get Leetcode Solution | 165 | |||||||
723 | Populating Next Правые указатели в каждом узле | 165 | |||||||
724 | Двоичное дерево Zigzag Уровень. 0313 | 165 | |||||||
726 | Power of Four Leetcode Solution | 165 | |||||||
727 | Generate all possible sorted arrays from alternate elements of two given sorted arrays | 165 | |||||||
728 | String to Целое число (atoi) LeetCode Solution | 165 | |||||||
729 | Добавить и найти слово – Дизайн структуры данных LeetCode | 165 | |||||||
730 | Find whether an array is subset of another array | 165 | |||||||
731 | Find unique character in a string | 165 | |||||||
732 | Ugly Number Leetcode Solution | 165 | |||||||
733 | k-й недостающий элемент в возрастающей последовательности, которого нет в данной последовательности | 164 | |||||||
734 | Подсчитать четверки из четырех отсортированных массивов, сумма которых равна заданному значению x | 164 | |||||||
735 | Minimum Distance Between BST Nodes Leetcode Solution | 164 | |||||||
736 | Rank Transform of an Array Leetcode Solution | 164 | |||||||
737 | Merge Two Binary Деревья Решение LeetCode | 164 | |||||||
738 | Выполнение сдвигов строк Leetcode | 164 | |||||||
739 | Mor Traversal0313 | 164 | |||||||
740 | Construct BST from given Preorder Traversal | 164 | |||||||
741 | Snakes and Ladders LeetCode Solution | 164 | |||||||
742 | Restore IP Addresses Leetcode Solution | 164 | |||||||
743 | Растущий стек на основе массива | 163 | |||||||
744 | Двоичное дерево Максимальная сумма путей Решение LeetCode | 163 | |||||||
745 | Check if Two Expressions With Brackets are Same | 163 | |||||||
746 | Minimum Cost For Tickets Leetcode Solution | 163 | |||||||
747 | Maximum Product of Three Numbers LeetCode Solution | 163 | |||||||
748 | Решение LeetCode для гоночных автомобилей | 163 | |||||||
749 | Соответствие регулярным выражениям12 162 | ||||||||
750 | Evaluate Reverse Polish Notation LeetCode Solution | 162 | |||||||
751 | Student Attendance Record I Leetcode Solution | 162 | |||||||
752 | Word Pattern LeetCode Solution | 162 | |||||||
753 | Удаление скобок из алгебраической строки, содержащей операторы + и – | 162 | |||||||
754 | Диагональный обход бинарного дерева | 162 | |||||||
755 | Largest Rectangle in Histogram LeetCode Solution | 162 | |||||||
756 | Hamming Distance Leetcode Solution | 162 | |||||||
757 | Binomial Coefficient | 162 | |||||||
758 | Количество NGE справа | 162 | |||||||
759 | Задача тайлинга | 162 | |||||||
760 | Finding K closest element | 162 | |||||||
761 | Keyboard Row Leetcode Solution | 162 | |||||||
762 | Jump Game | 161 | |||||||
763 | Valid Number | 161 | |||||||
764 | Найти медиану из потока данных Решение LeetCode | 161 | |||||||
765 | Максимальная прибыль при планировании заданий Решение Leetcode | 161 | |||||||
766 | Печать двоичного дерева в вертикальном порядке | 161 | |||||||
767 | Элементы, чтобы быть добавленными, так что все элементы | Элементы были добавлены, так что все элементы | . | Максимум 69 чисел. Решение LeetCode | 161 | ||||
769 | Кодированный декомпресс-длина.0313 | 161 | |||||||
771 | Minimum time required to rot all oranges | 160 | |||||||
772 | Kth ancestor of a node in binary tree | 160 | |||||||
773 | Top K Frequent Words LeetCode Решение | 160 | |||||||
774 | Merge K Сортированные списки связанных списков | 160 | |||||||
Linked List List List.0312 776 | Maximum Depth of N-ary Tree Leetcode Solution | 160 | |||||||
777 | Minimum Height Trees | 160 | |||||||
778 | Merge Sorted Array LeetCode Solution | 160 | |||||||
779 | Отсортированный связанный список для сбалансированного BST | 160 | |||||||
780 | Суммарный вес вложенного списка II Решение LeetCode | 160 | |||||||
160 | |||||||||
782 | Deletion in a Binary Tree | 160 | |||||||
783 | Best Meeting Point LeetCode Solution | 160 | |||||||
784 | Подсчет элементов, общих для обоих списков, но с разными ценами0313 | 160 | |||||||
786 | Minimize Maximum Pair Sum in Array LeetCode Solution | 160 | |||||||
787 | Check for Palindrome after every character replacement Query | 159 | |||||||
788 | Program for Bridge and Проблема с факелом | 159 | |||||||
789 | N-Queens LeetCode Solution | 159 | |||||||
790 | |||||||||
Find if0313 | 159 | ||||||||
791 | Partition to K Equal Sum Subsets Leetcode Solution | 159 | |||||||
792 | Base 7 Leetcode Solution | 159 | |||||||
793 | Check If Array Pairs Are Divisible by k LeetCode Solution | 159 | |||||||
794 | Поиск в двоичном дереве поиска Leetcode Solution | 159 | |||||||
7 | 159 | ||||||||
796 | Special Array With X Elements Greater Than or Equal X Leetcode Solution | 159 | |||||||
797 | Maximum Nesting Depth of the Parentheses Leetcode Solution | 159 | |||||||
798 | Решение литкода симметричного дерева | 159 | |||||||
799 | Всего чисел без повторяющихся цифр в диапазоне | 159 | |||||||
800 | String comparison containing wildcards | 159 | |||||||
801 | Longest Subarray Having Count of 1s One More than Count of 0s | 159 | |||||||
802 | Sort an array according to the order defined by another array | 158 | |||||||
803 | Разделить строку на сбалансированные строки Решение Leetcode | 158 | |||||||
804 | Дополнение числа 9 Решение Leetcode0313 | 158 | |||||||
805 | Form Minimum Number From Given Sequence | 158 | |||||||
806 | Number of Islands II LeetCode Solution | 158 | |||||||
807 | Crawler Log Folder Leetcode Solution | 158 | |||||||
808 | Транспонирование графика | 158 | |||||||
809 | Найти все дубликаты в массиве Решение LeetCode | 15833||||||||
810 | Largest rectangular sub-matrix whose sum is 0 | 158 | |||||||
811 | Check if an Array is Stack Sortable | 157 | |||||||
812 | Balanced Expression with Replacement | 157 | |||||||
813 | Circular Queue | 157 | |||||||
814 | Binary Search Tree Search and Insertion | 157 | |||||||
815 | A Space Optimized DP solution for 0-1 Knapsack Problem | 157 | |||||||
816 | Final Prices With a Special Discount in a Shop Leetcode Solution | 157 | |||||||
817 | Minimum sum of multiplications of n Числа | 157 | |||||||
818 | Курс. 0313 | ||||||||
820 | One Edit Distance LeetCode Solution | 157 | |||||||
821 | Brick Wall LeetCode Solution | 157 | |||||||
822 | Nearest Exit from Entrance in Maze LeetCode Solution | 157 | |||||||
823 | Минимальное время посещения всех точек Решение по литкоду | 157 | |||||||
824 | Поиск решения 2D Matrix II по литкоду | 157 | |||||||
825 | Partition List Leetcode Solution | 157 | |||||||
826 | Remove Nth Node From End of List Leetcode Solution | 157 | |||||||
827 | Last Stone Weight II LeetCode Solution | 157 | |||||||
828 | Максимальная разница между возрастающими элементами Решение LeetCode | 157 | |||||||
829 | Приоритетная очередь с использованием двусвязного списка | 157 | |||||||
830 | Subarray Product Less Than K LeetCode Solution | 157 | |||||||
831 | Identify and Mark Unmatched Parenthesis in an Expression | 156 | |||||||
832 | Interval Tree | 156 | |||||||
833 | Изменить порядок данных в лог-файлах0313 | 156 | |||||||
835 | Permutation Coefficient | 156 | |||||||
836 | Remove Duplicates from Sorted List LeetCode Solution | 156 | |||||||
837 | LCS (Longest Common Subsequence) of three strings | 156 | |||||||
838 | Сортировка массива по четности II Решение LeetCode | 156 | |||||||
839 | Минимум переходов для достижения дома Решение LeetCode | 156 | |||||||
840 | Best Time to Buy and Sell Stock with Transaction Fee Leetcode Solution | 155 | |||||||
841 | Sort Colors | 155 | |||||||
842 | Clone Graph LeetCode Solution | 155 | |||||||
843 | Допустимые скобки Решение LeetCode | 155 | |||||||
844 | Повторяющийся шаблон подстроки Решение LeetCode | 0312 155||||||||
845 | Can Place Flowers LeetCode Solution | 155 | |||||||
846 | Minimum swaps to make sequences increasing | 155 | |||||||
847 | Matrix Chain Multiplication | 155 | |||||||
848 | Дан массив пар Найдите в нем все симметричные пары | 155 | |||||||
849 | Alien Dictionary LeetCode Solution | 155 | |||||||
850 | Find the subarray with least average | 155 | |||||||
851 | Find Maximum Sum Possible Equal Sum of Three Stacks | 155 | |||||||
852 | Brightest Position on Street LeetCode Solution | 154 | |||||||
853 | Получить максимум в сгенерированном массиве Решение Leetcode0313 | 154 | |||||||
855 | Relative Ranks Leetcode Solution | 154 | |||||||
856 | Maximum size subarray sum equals k | 154 | |||||||
857 | Minimum Sum Path in a Triangle | 154 | |||||||
858 | Подсчет способов достижения n-й ступеньки с использованием шага 1, 2 или 3 | 154 | |||||||
859 | Запросы суммирования диапазона без обновлений | 5431 | |||||||
860 | Convert BST to Min Heap | 154 | |||||||
861 | Sorted Array to Balanced BST | 154 | |||||||
862 | A program to check if a binary tree is BST or not | 154 | |||||||
863 | Минимальное количество переходов для достижения конца0312 153 | ||||||||
865 | Design a Stack With Increment Operation Leetcode Solution | 153 | |||||||
866 | Missing Element in Sorted Array LeetCode Solution | 153 | |||||||
867 | Minimum Swaps to Make Strings Equal Решение Leetcode | 153 | |||||||
868 | Вставить Удалить GetRandom | 153 | |||||||
869 | |||||||||
153 | |||||||||
870 | Path with maximum average value | 153 | |||||||
871 | Design Browser History LeetCode Solution | 153 | |||||||
872 | Number of Days Between Two Dates LeetCode Solution | 153 | |||||||
873 | Подсчет различных элементов в каждом окне размера K0313 | 153 | |||||||
875 | Find all triplets with zero sum | 153 | |||||||
876 | Check if a given array can represent Preorder Traversal of Binary Search Tree | 153 | |||||||
877 | Friends Проблема сопряжения | 153 | |||||||
878 | Обход дерева (предварительный, по порядку и после) | 153 | |||||||
9 Общие символы Решение Leetcode 9 Общие символы | 3 | 30313 | 152 | ||||||
880 | Union and Intersection of two Linked Lists | 152 | |||||||
881 | Check if stack elements are pairwise consecutive | 152 | |||||||
882 | Diagonal Traverse LeetCode Solution | 152 | |||||||
883 | Подмножество с суммой, кратной m | 152 | |||||||
884 | 152 | ||||||||
885 | Level order Traversal in Spiral Form | 152 | |||||||
886 | Sum of nearest smaller and greater number | 152 | |||||||
887 | Guess Number Higher or Lower LeetCode Solution Между | 152 | |||||||
888 | Подсчет отрицательных чисел в сортированной матрице0313 | 152 | |||||||
890 | Guess Number Higher or Lower II | 151 | |||||||
891 | Daily Temperatures Leetcode Solution | 151 | |||||||
892 | Find distance between two nodes of a Binary Tree | 151 | |||||||
893 | Найти все переставленные строки заданной строки в матрице0313 | 151 | |||||||
895 | Iterative Postorder Traversal Using Two Stacks | 151 | |||||||
896 | Insert into a Binary Search Tree Leetcode Solution | 151 | |||||||
897 | GCDs of given index ranges in массив | 151 | |||||||
898 | Хранение ключей и значений на основе времени0313 | 151 | |||||||
900 | Range LCM Queries | 151 | |||||||
901 | Sequences of given length where every element is more than or equal to twice of previous | 151 | |||||||
902 | Water Бутылки Решение Leetcode | 151 | |||||||
903 | Робот, ограниченный кругом Решение LeetCode | 151 | |||||||
904 | |||||||||
151 | |||||||||
905 | Delete And Earn | 151 | |||||||
906 | An Interesting Method to generate Binary Numbers from 1 to n | 151 | |||||||
907 | Maximum Score After Splitting a String Leetcode Solution | 150 | |||||||
908 | Переупорядочить массив таким образом, чтобы arr[i] равнялся i0313 | 150 | |||||||
910 | Construct Complete Binary Tree from its Linked List Representation | 150 | |||||||
911 | Three way partitioning of an array around a given range | 150 | |||||||
912 | K | 150 | |||||||
913 | Количество отдельных островов Решение лит-кода | 150 | |||||||
914 | Dividing Array into Pairs With Sum Divisible by K | 150 | |||||||
915 | Queue using Stacks | 150 | |||||||
916 | Alien Dictionary | 150 | |||||||
917 | Проверьте, может ли данный массив представлять обход по порядку уровней двоичного дерева поиска | 150 | |||||||
918 | Наименьшее количество уникальных целых чисел после K удалений Решение Leetcode | 150 | |||||||
919 | BFS for Disconnected Graph | 150 | |||||||
920 | 3 Sum | 149 | |||||||
921 | Averages of Levels in Binary Tree | 149 | |||||||
922 | Преобразование отсортированного списка в двоичное дерево поиска нечетно и j < i | 149 | |||||||
924 | All Unique Triplets that Sum up to a Given Value | 149 | |||||||
925 | Queries for GCD of all numbers of an array except elements in a given range | 149 | |||||||
926 | . 0313149 | ||||||||
929 | Rearrange Spaces Between Words Leetcode Solution | 149 | |||||||
930 | Analyze User Website Visit Pattern LeetCode Solution | 149 | |||||||
931 | Destination City Leetcode Solution | 149 | |||||||
932 | Установить матричные нули Решение литкода | 149 | |||||||
933 | Решение 9 Кратчайшее слово0313 | 149 | |||||||
934 | Pattern Occurrences using Stack | 149 | |||||||
935 | Count Subarrays with Same Even and Odd Elements | 148 | |||||||
936 | Special Positions in a Binary Matrix Leetcode Solution | 148 | |||||||
937 | Количество эквивалентных домино-пар Решение Leetcode | 148 | |||||||
938 Изменить решение Leet | Leetcode0313 | 148 | |||||||
939 | Vertical sum in a given binary tree | 148 | |||||||
940 | Sliding Window Maximum | 148 | |||||||
941 | Spiral Matrix III LeetCode Solution | 148 | |||||||
942 | Мой календарь I Решение LeetCode | 148 | |||||||
943 | Максимальная сумма подмассива без учета определенных элементов | 147 | 0310|||||||
944 | Palindrome Partitioning Leetcode Solution | 147 | |||||||
945 | Maximum Frequency Stack Leetcode Solution | 147 | |||||||
946 | Remove Duplicates from Sorted List II LeetCode Solution | 147 | |||||||
947 | Деревья минимальной высоты Решение LeetCode | 147 | |||||||
948 | Двоичное дерево Самая длинная последовательная последовательность Решение LeetCode | 147 | |||||||
949 | Largest area rectangular sub-matrix with equal number of 1’s and 0’s | 147 | |||||||
950 | Product of Array Except Self LeetCode Solution | 147 | |||||||
951 | Проверить, не перекрываются ли любые два интервала среди заданного набора интервалов | 147 | |||||||
952 | Двоичный массив после M операций переключения диапазона | 147 | |||||||
953 | Count Submatrices With All Ones LeetCode Solution | 147 | |||||||
954 | Minesweeper LeetCode Solution | 147 | |||||||
955 | Maximize Sum of Array after K Negations Leetcode Solution | 147 | |||||||
956 | 4Sum | 147 | |||||||
957 | Сильносвязный компонент | 147 | |||||||
Count subarrays where second highest lie before highest | 146 | ||||||||
959 | Construct BST from its given Level Order Traversal | 146 | |||||||
960 | Print Fibonacci sequence using 2 variables | 146 | |||||||
961 | Подъем по лестнице | 146 | |||||||
962 | Три последовательных коэффициента Решение Leetcode | 146 | Reverse Nodes in K-Group | 146 | |||||
964 | Combination Sum IV LeetCode Solution | 146 | |||||||
965 | Create Maximum Number | 146 | |||||||
966 | Longest Palindromic Subsequence 146 | ||||||||
967 | Поиск в глубину (DFS) для графика0313 | 145 | |||||||
969 | Count Primes in Ranges | 145 | |||||||
970 | Intersection of Two Linked Lists LeetCode Solution | 145 | |||||||
971 | Unique Paths II | 145 | |||||||
972 | Разделение массива на последовательные подпоследовательности | 145 | |||||||
973 | Объединение интервалов | 145 | |||||||
Разностный массив | Range update query in O(1) | 145 | ||||||||
975 | Stone Game II Leetcode | 145 | |||||||
976 | Design Hit Counter LeetCode Solution | 144 | |||||||
977 | Can Make Arithmetic Прогрессия от последовательности Leetcode Solution | 144 | |||||||
978 | Разделение палиндрома | 144 | |||||||
979 | Merge Sort | 144 | |||||||
980 | Valid Boomerang Leetcode Solution | 144 | |||||||
981 | Word Break | 144 | |||||||
982 | Symmetric Tree | 144 | |||||||
983 | K-й наименьший элемент в решении литкода BST | 144 | |||||||
984 | Операция удаления двоичного дерева поиска | 144 | |||||||
985 | Find Maximum of Minimum for Every Window Size in a Given Array | 144 | |||||||
986 | Maximum Product Subarray | 144 | |||||||
987 | Boundary Traversal of binary tree | 143 | |||||||
988 | Перетасовать 2n целых чисел как a1-b1-a2-b2-a3-b3-. .bn без использования дополнительного пробела0313 | 143 | |||||||
990 | Find the Difference Leetcode Solution | 143 | |||||||
991 | Largest divisible pairs subset | 143 | |||||||
992 | Breadth First Search (BFS) for a Graph | 143 | |||||||
993 | Длина наибольшей подпоследовательности Фибоначчи0313 | ||||||||
995 | Sign of the Product of an Array LeetCode Solution | 143 | |||||||
996 | Largest Substring Between Two Equal Characters Leetcode Solution | 143 | |||||||
997 | Number Of Longest Increasing Subsequence | 143 | |||||||
998 | Подсчет пар с заданной суммой | 143 | |||||||
999 | Подпоследовательность максимальной длины с разностью между соседними элементами 0 или 1 либо 9 , либо 10313 | 142 | |||||||
1000 | The Maze III LeetCode Solution | 142 | |||||||
1001 | Newman-Conway Sequence | 142 | |||||||
1002 | Find postorder traversal of BST from preorder traversal | 142 | |||||||
1003 | Граф Допустимое решение LeetCode дерева | 142 | |||||||
1004 | Самая длинная подпоследовательность, для которой разница между соседними элементами равна единице | 142 | |||||||
1005 | Maximum Length of Repeated Subarray | 142 | |||||||
1006 | Asteroid Collision LeetCode Solution | 142 | |||||||
1007 | Segment Tree | 142 | |||||||
1008 | Найти такое количество пар в массиве, что их XOR равно 0 | 142 | |||||||
1009 | Задача о разделе художника | 142 | |||||||
1010 | Найдите первый круговой тур, который посещает все бензиновые насосы | 142 | |||||||
1011 | Высота генерального дерева | . Двоичное дерево | 142 | ||||||
1013 | Вставка в двоичном дереве | 142 | |||||||
1014 | Проверка, если нанесение слов.0313 | 142 | |||||||
1015 | Largest Number Leetcode Solution | 141 | |||||||
1016 | Rearrange array such that even positioned are greater than odd | 141 | |||||||
1017 | Validate Binary Search Tree | 141 | |||||||
1018 | Решение Scramble String LeetCode | 141 | |||||||
1019 | Поиск повторяющихся поддеревьев | 3 1 4031230313 | |||||||
1020 | First missing positive | 141 | |||||||
1021 | Maximum subsequence sum such that no three are consecutive | 141 | |||||||
1022 | String Matching in an Array Leetcode Solution | 141 | |||||||
1023 | Построение самой длинной возрастающей подпоследовательности (N log N)0313 | 141 | |||||||
1025 | Compute nCr % p | 140 | |||||||
1026 | Minimum Index Sum of Two Lists | 140 | |||||||
1027 | Construct Binary Tree from given Parent Array representation | 140 | |||||||
1029 | Максимальное произведение индексов следующего большего слева и справа | 140 | |||||||
0313 | 140 | ||||||||
1030 | Level order traversal using two Queues | 140 | |||||||
1031 | Decrypt String from Alphabet to Integer Mapping Leetcode Solution | 140 | |||||||
1032 | Kill Process Решение LeetCode. 0312 Friends Of Appropriate Ages LeetCode Solution | 140 | |||||||
1035 | Number of palindromic paths in a matrix | 140 | |||||||
1036 | Shortest Completing Word Leetcode Solution | 140 | |||||||
1037 | Build Массив со стеком.0310 | ||||||||
1039 | Advantages of BST over Hash Table | 140 | |||||||
1040 | Regular Expression Matching Regular Expression Matching LeetCode Solution | 139 | |||||||
1041 | Balanced Binary Tree | 139 | |||||||
1042 | K-й наименьший элемент в отсортированной матрице Решение LeetCode | 139 | |||||||
1043 | Следующий больший элемент III Решение LeetCode | 139 | |||||||
1044 | Make The String Great Leetcode Solution | 139 | |||||||
1045 | Print Next Greater Number of Q queries | 139 | |||||||
1046 | K maximum sums of overlapping contiguous sub -массивы | 139 | |||||||
1047 | Двоичное дерево поиска | 139 | |||||||
1048 | Максимальная сумма подлучей | 139 | |||||||
1049 | Find a Peak Element II LeetCode Solution | 139 | |||||||
1050 | Maximum weight transformation of a given string | 139 | |||||||
1051 | Count pairs from two sorted arrays сумма которых равна заданному значению x | 139 | |||||||
1052 | Максимальное количество способов разбиения массива Решение LeetCode | 139 | |||||||
1053 | Minimum Size Subarray Sum | 138 | |||||||
1054 | Morris Inorder Traversal | 138 | |||||||
1055 | Rearrange an array such that ‘arr[j]’ becomes ‘i’ if ‘arr [I] ‘IS’ J ‘ | 138 | |||||||
1056 | Доступные захваты для Rook LeetCode Solution | 138 | |||||||
1057 | |||||||||
1057 | |||||||||
1057 | PAGT0303 | 1058 | Lowest Common Ancestor | 138 | |||||
1059 | Double the first element and move zero to end | 138 | |||||||
1060 | Ugly Numbers | 138 | |||||||
1061 | Invalid Транзакции Решение LeetCode | 138 | |||||||
1062 | Побитовое И диапазона чисел Решение LeetCode | 137 | |||||||
1063 | |||||||||
137 | |||||||||
1066 | Уродливое число II Решение LeetCode | 137 | |||||||
Решение Arplicaort 1067 | Удалить из LeetCode DuetCode | 0313 | 137 | ||||||
1068 | Add two numbers | 137 | |||||||
1069 | Find whether a subarray is in form of a mountain or not | 137 | |||||||
1070 | Custom Sort String Leetcode Solution | 137 | |||||||
1071 | Важность сотрудников Решение LeetCode | 137 | |||||||
1072 | Количество братьев и сестер0313 | 137 | |||||||
1073 | Super Ugly Number | 137 | |||||||
1074 | Path Sum II LeetCode Solution | 137 | |||||||
1075 | Maximum difference between frequency of two elements such that element having greater частота также больше | 137 | |||||||
1076 | Защита IP-адреса LeetCode Solution | 136 | |||||||
1077 | Generate Parentheses Leetcode Solution | 136 | |||||||
1078 | Populating Next Right Pointers in Each Node Leetcode Solution | 136 | |||||||
1079 | Consecutive Characters LeetCode Solution | 136 | |||||||
1080 | Решение Leetcode следующей перестановки | 136 | |||||||
1081 | Действительное решение Tic-Tac-Toe State LeetCode | 136 | |||||||
1082 | Implement Trie (Prefix Tree) Leetcode Solution | 136 | |||||||
1083 | Recover Binary Search Tree Leetcode Solution | 136 | |||||||
1084 | Path Sum | 136 | |||||||
1085 | Типы бинарного дерева | 136 | |||||||
1086 | Удаление палиндромных подпоследовательностей Решение Leetcode | 136 | 1087 | Find the minimum distance between two numbers | 135 | ||||
1088 | Kth Smallest Product of Two Sorted Arrays LeetCode Solution | 135 | |||||||
1089 | Binary Tree Right Side View LeetCode Solution | 135 | |||||||
1090 | Увеличить расстояние до ближайшего человека0313 | 135 | |||||||
1092 | Search in Sorted Rotated Array | 135 | |||||||
1093 | Rearrange array such that even index elements are smaller and odd index elements are greater | 135 | |||||||
1094 | Преобразование BST в Min-Heap без использования массива0313 | 134 | |||||||
1097 | Queries for Number of Distinct Elements in a Subarray | 134 | |||||||
1098 | Serialize and Deserialize Binary Tree LeetCode Solution | 134 | |||||||
1099 | Longest Increasing Consecutive Subsequence | 134 | |||||||
1100 | Вывести все триплеты в отсортированном массиве, образующие AP | 134 | |||||||
1101 | Longest Bitonic Subsequence | 134 | |||||||
1102 | Number of Closed Islands Leetcode Solution | 134 | |||||||
1103 | Day of the Year Leetcode Solution | 134 | |||||||
1104 | Increasing Triplet Subsequence LeetCode Решение | 134 | |||||||
1105 | Самое большое поддерево BST LeetCode Решение | 134 | |||||||
1106 | Cutting a Rod | 133 | |||||||
1107 | Level of Each node in a Tree from source node | 133 | |||||||
1108 | Find Smallest Range Containing Elements from k Lists | 133 | |||||||
1109 | Перестановка палиндрома Решение LeetCode | 133 | |||||||
1110 | Найти максимальную разницу между ближайшими левыми и правыми меньшими элементами | 133 | |||||||
1111 | Smallest Common Region Leetcode Solution | 133 | |||||||
1112 | Root to Leaf path with target sum Leetcode Solutions | 133 | |||||||
1113 | Print Right View of a Binary Tree | 133 | |||||||
1114 | Решение литкода третьего максимального числа | 133 | |||||||
1115 | Структура данных двоичного дерева | 333 | |||||||
1116 | Construct Binary Tree from Preorder and Postorder Traversal LeetCode Solution | 133 | |||||||
1117 | Count Largest Group Leetcode Solution | 133 | |||||||
1118 | Subarrays with K Different Integers Leetcode Solution | 133 | |||||||
1119 | Количество учащихся, выполняющих домашнее задание в заданное время Решение Leetcode | 133 | |||||||
1120 | Удалить дубликаты из отсортированного массива | 132 | |||||||
1121 | Взгляд дна | 132 | |||||||
132 | |||||||||
132 | |||||||||
. | 132 | ||||||||
1124 | Итеративный метод поиска предков заданного бинарного дерева0313 | 132 | |||||||
1125 | Products of ranges in an array | 132 | |||||||
1126 | Write Code to Determine if Two Trees are Identical | 132 | |||||||
1127 | Distinct Subsequences | 132 | |||||||
1128 | Сумма четных чисел после запросов0313 | 131 | |||||||
1130 | Thousand Separator Leetcode Solution | 131 | |||||||
1131 | Constant time range add operation on an array | 131 | |||||||
1132 | Minimum Absolute Difference in BST Leetcode Solution | 131 | |||||||
1133 | Решение простого палиндрома LeetCode | 131 | |||||||
1134 | |||||||||
131 | |||||||||
1135 | Maximum Product Subarray | 130 | |||||||
1136 | Search Insert Position | 130 | |||||||
1137 | Topological Sorting | 130 | |||||||
1138 | Minimum Score Триангуляция многоугольника Leetcode Solution | 130 | |||||||
1139 | Вывести измененный массив после выполнения команд сложения и вычитания | 130 | |||||||
1140 | Longest Subarray of 1’s After Deleting One Element LeetCode Solution | 130 | |||||||
1141 | Construct K Palindrome Strings LeetCode Solution | 130 | |||||||
1142 | Palindromic Substrings Leetcode Solution | 130 | |||||||
1143 | Среднее значение массива после удаления некоторых элементов Решение литкода | 130 | |||||||
1144 | Delete Nodes and Return Forest Leetcode Solution | 129 | |||||||
1145 | Moser-de Bruijn Sequence | 129 | |||||||
1146 | Golomb sequence | 129 | |||||||
1147 | Find maximum length Snake sequence | 129 | |||||||
1148 | Priority Queue | 129 | |||||||
1149 | вторая сумма двоичных последовательностей с одинаковой длиной | 0313 | 129 | ||||||
1150 | Diameter of N-Ary Tree LeetCode Solution | 129 | |||||||
1151 | Search an Element in Sorted Rotated Array | 129 | |||||||
1152 | Red-Black Tree Introduction | 129 | |||||||
1153 | Образки в парах | 129 | |||||||
1154 | БЛИЧНЫЙ БОЛЬШОЙ ДРЕВОЙ ДЕРЕВО | ||||||||
1155 | Subset Sum Problem in O(sum) space | 128 | |||||||
1156 | Maximum Product of Splitted Binary Tree LeetCode Solution | 128 | |||||||
1157 | Bus Routes Leetcode Solution | 128 | |||||||
1158 | Возможное решение LeetCode для двух разделов | 128 | |||||||
1159 | Сравнение строк по частоте наименьшего символа Решение Leetcode | 128 | |||||||
1160 | Check Array Formation Through Concatenation Leetcode Solution | 128 | |||||||
1161 | Binary Tree to Binary Search Tree Conversion | 128 | |||||||
1162 | Find Two Non-overlapping Sub -arrays Каждый с целевой суммой Решение LeetCode | 128 | |||||||
1163 | Удалить максимальное количество ребер, чтобы граф оставался полностью проходимым Решение Leetcode | 127 | |||||||
1164 | Web Crawler LeetCode Solution | 127 | |||||||
1165 | Rotate Array | 127 | |||||||
1166 | Merge two BSTs with limited extra space | 127 | |||||||
1167 | Минимальная стоимость перемещения фишек в ту же позицию Решение LeetCode | 127 | |||||||
1168 | Преобразование BST в дерево больших сумм | 127 | |||||||
1169 | K’th Largest element in BST using constant extra space | 127 | |||||||
1170 | Count Pairs Whose Products Exist in Array | 127 | |||||||
1171 | Maximize sum of последовательные разности в круговом массиве | 127 | |||||||
1172 | Дерево решений | 127 | |||||||
1173 | Kth Наименьший код таблицы0313 | 127 | |||||||
1174 | Factorial Trailing Zeroes LeetCode Solution | 127 | |||||||
1175 | Maximum Binary Tree | 127 | |||||||
1176 | Longest Repeated Subsequence | 126 | |||||||
1177 | Решение непрерывного массива LeetCode | 126 | |||||||
1178 | Найти отсортированную подпоследовательность размера 3 за линейное время | 126 | |||||||
1179 | Minimum Sideway Jumps LeetCode Solution | 126 | |||||||
1180 | Find Largest Value in Each Tree Row LeetCode Solution | 126 | |||||||
1181 | Search Suggestions System LeetCode Solution | 126 | |||||||
1182 | Обратный путь в BST с использованием очереди0313 | 125 | |||||||
1184 | Дата переформатирования Решение LeetCode | 125 | |||||||
1185 | Учитывая бинарное дерево, как удалить все половинки? | 125 | |||||||
1186 | Maximum Depth Of Binary Tree | 125 | |||||||
1187 | Find the smallest binary digit multiple of given number | 125 | |||||||
1188 | Decrease Elements To Make Array Zigzag Решение LeetCode | 125 | |||||||
1189 | Closest Leaf in a Binary Tree LeetCode Solution | 124 | |||||||
1190 | Valid Triangle Number | 124 | |||||||
1191 | Minimum Swaps To Make Sequences Increasing LeetCode Solution | 124 | |||||||
1192 | Первая неверная версия | 124 | |||||||
1193 | Действительное решение Perfect Square LeetCode | 124 | |||||||
1194 | Matchsticks to Square Leetcode Solution | 124 | |||||||
1195 | Maximum number of segments of lengths a, b and c | 124 | |||||||
1196 | Sum of Left Leaves LeetCode Solution | 124 | |||||||
1197 | Наименьший общий предок в двоичном дереве поиска | 124 | |||||||
1198 | 0313 | 124 | |||||||
1199 | Guess The Word | 123 | |||||||
1200 | Maximum sum bitonic subarray | 123 | |||||||
1201 | Graph and its representation | 123 | |||||||
1202 | Преобразование отсортированного массива в двоичное дерево поиска. 0312 123 | ||||||||
1204 | Swapping Nodes in a Linked List Leetcode Solution | 123 | |||||||
1205 | Maximum sum of pairs with specific difference | 122 | |||||||
1206 | Concatenation of Array LeetCode Solution | 122 | |||||||
1207 | Запросы вероятности четного или нечетного числа в заданных диапазонах0313 | 122 | |||||||
1209 | Filter Restaurants by Vegan-Friendly, Price and Distance Leetcode Solution | 122 | |||||||
1210 | Queue Reconstruction by Height | 122 | |||||||
1211 | Moving Stones Until Consecutive Решение Leetcode | 122 | |||||||
1212 | Новая 21 игра | 122 | |||||||
1213 | Решение Crossing Leetcode0313 | 122 | |||||||
1214 | Maximum sum of a path in a Right Number Triangle | 121 | |||||||
1215 | Champagne Tower LeetCode Solution | 121 | |||||||
1216 | How to print maximum number of A с использованием заданных четырех ключей | 121 | |||||||
1217 | Запрос суммы диапазона с использованием разреженной таблицы0313 | 121 | |||||||
1219 | Replace two consecutive equal values with one greater | 121 | |||||||
1220 | Range Queries for Longest Correct Bracket Subsequence | 121 | |||||||
1221 | Print n terms of Newman Последовательность Conneway | 120 | |||||||
1222 | УРОВНЕ 2D -вектор. 0313 | 120 | |||||||
1224 | Kth Smallest Element in a BST | 120 | |||||||
1225 | Lowest Common Ancestor of a Binary Tree Leetcode Solution | 120 | |||||||
1226 | Graph Cloning | 120 | |||||||
1227 | Разрыв целого числа LeetCode Solution | 120 | |||||||
Преобразование Inte-Zcode 1228 | um Преобразование Inte-Zcode 1228 | um0313 | 120 | ||||||
1229 | Missing Number | 120 | |||||||
1230 | BST to a Tree with Sum of all Smaller Keys | 120 | |||||||
1231 | Perfect Squares LeetCode Solution | 120 | |||||||
1232 | Проверить, являются ли все уровни двух двоичных деревьев анаграммами или нет | ||||||||
1234 | Arithmetic Slices II – Subsequence LeetCode Solution | 119 | |||||||
1235 | Print modified array after multiple array range increment operations | 119 | |||||||
1236 | Mean of range in array | 119 | |||||||
1237 | Самый большой знак плюса Решение LeetCode | 119 | |||||||
1238 | Список пропусков для дизайна Решение LeetCode | 118 | |||||||
1239 | Longest Common Prefix Using Word by Word Matching | 118 | |||||||
1240 | Sliding Window Median Leetcode Solution | 118 | |||||||
1241 | Power of Two | 118 | |||||||
1242 | Проверить, есть ли у каждого внутреннего узла BST ровно один потомок0313 | 117 | |||||||
1244 | Merge k Sorted Lists Leetcode Solution | 117 | |||||||
1245 | Bold Words in String LeetCode Solution | 117 | |||||||
1246 | Check for Identical BSTs without building the trees | 117 | |||||||
1247 | Найти минимальное количество операций слияния для создания палиндрома массива | 117 | |||||||
1248 | Maximize Elements Using Another Array | 117 | |||||||
1249 | Maximum Array from Two given Arrays Keeping Order Same | 117 | |||||||
1250 | Contiguous Array | 117 | |||||||
1251 | Check Completeness of a Двоичное дерево Решение LeetCode | 117 | |||||||
1252 | Параллельные курсы II Решение LeetCode | 116 | |||||||
1253 | Find Minimum in Rotated Sorted Array II LeetCode Solution | 116 | |||||||
1254 | Count Subsets Having Distinct Even Numbers | 116 | |||||||
1255 | Min Cost Climbing Stairs LeetCode Solution | 116 | |||||||
1256 | Минимум удалить, чтобы скобки стали действительными0313 | 116 | |||||||
1258 | Maximum Sum Increasing Subsequence | 115 | |||||||
1259 | Verify Preorder Serialization of a Binary Tree | 115 | |||||||
1260 | Image Overlap LeetCode Solution | 115 | |||||||
1261 | Найти k-й наименьший элемент в BST (упорядочить статистику в BST)0313 | 114 | |||||||
1263 | Minimum Time to Collect All Apples in a Tree LeetCode Solution | 114 | |||||||
1264 | Maximum Product Subarray | 114 | |||||||
1265 | Next greater element | 113 | |||||||
1266 | Проверка четного или нечетного числа в двоичном массиве, представленного подмассивом0313 | 113 | |||||||
1268 | Excel Sheet Column Title LeetCode Solution | 113 | |||||||
1269 | Check if two nodes are on the same path in a Tree | 113 | |||||||
1270 | Count and Переключение запросов к двоичному массиву | 113 | |||||||
1271 | Наименьшее решение литкода диапазона II | 113 | |||||||
1272 | |||||||||
112 | |||||||||
1273 | Different Ways to Add Parentheses Leetcode Solution | 111 | |||||||
1274 | Check If a String Can Break Another String Leetcode Solution | 111 | |||||||
1275 | Koko Eating Bananas Решение LeetCode | 110 | |||||||
1276 | Слияние отсортированного массива | 110 | |||||||
Array Solution LeetCode 1277 | 30313 | 110 | |||||||
1278 | Number of elements less than or equal to a given number in a given subarray | 110 | |||||||
1279 | Peeking Iterator LeetCode Solution | 109 | |||||||
1280 | Largest Подматрица с перестановками Решение LeetCode | 109 | |||||||
1281 | Проверить, может ли X дать сдачу каждому человеку в очереди | 108 | |||||||
1282 | Newman–Shanks–Williams prime | 108 | |||||||
1283 | Range Minimum Query (Square Root Decomposition and Sparse Table) | 108 | |||||||
1284 | Queries for Decimal Values of Subarrays of a Двоичный массив | 107 | |||||||
1285 | Самая длинная подстрока, не содержащая повторяющихся символов0313 | 107 | |||||||
1287 | Arranging Coins Leetcode Solution | 105 | |||||||
1288 | Number of indexes with equal elements in given range | 105 | |||||||
1289 | Encoded String With Shortest Length LeetCode Solution | 105 | |||||||
1290 | Максимальное произведение возрастающей подпоследовательности0313 | 104 | |||||||
1292 | Random Pick Index LeetCode Solution | 104 | |||||||
1293 | Check given array of size n can represent BST of n levels or not | 104 | |||||||
1294 | Minimum Возможное целое число после не более чем K смежных перестановок цифр Решение LeetCode | 103 | |||||||
1295 | Найдите победителя круговой игры Решение LeetCode | 103 | |||||||
1296 | Binary Tree to Binary Search Tree Conversion using STL set | 103 | |||||||
1297 | Minimum Number of People to Teach LeetCode Solution | 102 | |||||||
1298 | Palindrome Number LeetCode Solution | 102 | |||||||
1299 | Insert Delete GetRandom O(1) Leetcode Solution | 101 | |||||||
1300 | |||||||||
101 | |||||||||
1301 | Continuous Subarray Sum LeetCode Solution | 101 | |||||||
1302 | Convert to Base -2 LeetCode Solution | 101 | |||||||
1303 | Reach a Number LeetCode Solution | 101 | |||||||
1304 | Сложить два числа II Решение литкода | 101 | |||||||
1305 | Преобразовать BST в двоичное дерево так, чтобы сумма всех больших ключей добавлялась к каждому ключу | 101 | |||||||
1306 | Number of Subsequences That Satisfy the Given Sum Condition LeetCode solution | 100 | |||||||
1307 | Queries on XOR of greatest odd divisor of the range | 100 | |||||||
1308 | Jump Game IV LeetCode Solution | 100 | |||||||
1309 | Design Underground System Leetcode Solution | 96 | |||||||
1310 | Print Maximum Length Chain of Pairs | 95 | |||||||
1311 | Detect Capital Leetcode Solution | 93 | |||||||
1312 | Shifting Letters LeetCode Solution | 93 | |||||||
1313 | Design A Leaderboard Leetcode Решение | 92 | |||||||
1314 | Подстрока с объединением всех слов Литкод Решение | 88 | |||||||
1315 | Count Sub Islands LeetCode Solution | 87 | |||||||
1316 | Minimum Path Sum Leetcode Solution | 87 | |||||||
1317 | Minimum Swaps to Group All 1’s Together Leetcode Solution | 86 | |||||||
1318 | Top K Frequent Elements Решение LeetCode | 85 | |||||||
1319 | Нечетное Четное Связанный список Решение Leetcode | 84 | |||||||
1320 | Binary Tree Inorder Traversal LeetCode Solution | 84 | |||||||
1321 | Longest Common Subsequence LeetCode Solution | 83 | |||||||
1322 | Maximum Population Year LeetCode Solution | 81 | |||||||
1323 | Найдите решение LeetCode городского судьи | 80 | |||||||
1324 | Найдите решение LeetCode городского судьи | 80 | |||||||
1325 | Decode String Leetcode Solution | 80 | |||||||
1326 | Best Meeting Point LeetCode Solution | 80 | |||||||
1327 | Shortest Unsorted Continuous Subarray LeetCode Solution | 78 | |||||||
1328 | Суммировать числа от корня к листу LeetCode Solution | 77 | |||||||
1329 | Дизайн Добавить и найти слова Структура данных LeetCode Solution | 74 | |||||||
1330 | Rectangle Overlap LeetCode Solution | 74 | |||||||
1331 | Maximum Population Year LeetCode Solution | 74 | |||||||
1332 | Flatten Binary Tree to Linked List LeetCode Solution | 71 | |||||||
1333 | Оценка в скобках Решение LeetCode | 71 | |||||||
1334 | Вставить в отсортированный круговой связанный список 9 Решение LeetCode | 71 | |||||||
1335 | Stone Game IV LeetCode Solution | 71 | |||||||
1336 | Range Sum Query 2D – Immutable LeetCode Solution | 70 | |||||||
1337 | Is Graph Bipartite? Решение LeetCode | 70 | |||||||
1338 | Действительный номер треугольника Решение LeetCode | 69 | |||||||
1339 | Заказать решение Leet Recodes 1339 | 0313 | 67 | ||||||
1340 | Divide Chocolate LeetCode Solution | 60 | |||||||
1341 | Step-By-Step Directions From a Binary Tree Node to Another LeetCode Solution | 53 | |||||||
1342 | Range Сумма BST LeetCode Solution | 49 | |||||||
1343 | Обратное целое решение LeetCode | 47 | |||||||
1344 | 30313 | 47 | |||||||
1345 | Sort Colors LeetCode Solution | 44 | |||||||
1346 | Maximum Side Length of a Square with Sum Less than or Equal to Threshold LeetCode Solution | 43 | |||||||
1347 | Повернуть строку Решение LeetCode | 42 | |||||||
1348 | Номер столбца листа Excel0313 | 25 | |||||||
1350 | Maximum Size Subarray Sum Equals k Leetcode Solution | 23 | |||||||
1351 | Camelcase Matching Leetcode Solution | 22 | |||||||
1352 | High Five LeetCode Solution | 22 | |||||||
1353 | Наибольшее количество камней, удаленных в той же строке или столбце Решение LeetCode | 22 | |||||||
1354 | Решение Leetcode | 21 | |||||||
1355 | Container With Most Water LeetCode Solution | 20 | |||||||
1356 | Valid Anagram Leetcode Solution | 20 | |||||||
1357 | Next Permutation LeetCode Solution | 19 | |||||||
1358 | Максимальное решение LeetCode со скользящим окном | 19 | |||||||
1359 | Поиск пикового элемента Решение LeetCode | 19 | |||||||
1360 | Group Anagrams LeetCode Solution | 18 | |||||||
1361 | Binary Search LeetCode Solution | 18 | |||||||
1362 | Flatten Binary Tree to Linked List LeetCode Solution | 18 | |||||||
1363 | Next Greater Element I Решение Leetcode | 17 | |||||||
1364 | Пары песен с общей продолжительностью, кратной 60 Решение LeetCode | 17 | |||||||
1365 | Valid Triangle Number LeetCode Solution | 16 | |||||||
1366 | Group Shifted Strings Leetcode Solution | 16 | |||||||
1367 | Paint House LeetCode Solution | 16 | |||||||
1368 | Вставить Удалить GetRandom O(1) – дубликаты разрешены Решение LeetCode | 15 | |||||||
1369 | Ближайшее значение дерева двоичного поиска II Решение LeetCode | 15 | |||||||
1370 | Sentence Screen Fitting LeetCode Solution | 15 | |||||||
1371 | Unique Binary Search Trees LeetCode Solution | 15 | |||||||
1372 | Isomorphic Strings LeetCode Solution | 15 | |||||||
1373 | Индекс пика в массиве Mountain Решение LeetCode | 15 | |||||||
1374 | Решение LeeCode Минимальное количество стрел для взрыва шара | 15 | |||||||
1375 | Плавать в поднимающейся воде Как мне их использовать? ПРИВЕТ! Сегодня мы поговорим о пулах потоков и распараллеливании вычислений. За последние несколько дней я узнал пару вещей об этом. В основном это будет о Java и JVM. Оказывается, есть много вещей, которые нужно знать о параллелизме в JVM, но, к счастью, многие люди знают эти вещи, так что вы можете их изучить! Пул потоков позволяет выполнять вычисления более чем в одном потоке одновременно. Допустим, у меня есть Super Slow Function, и я хочу запустить ее на 10 000 вещей, а у меня 32 ядра на процессоре. Тогда я смогу запустить свою функцию в 32 раза быстрее! Вот как это выглядит в Python. из multiprocessing.pool импорта ThreadPool определение медленной_функции(): делай что угодно результаты = ThreadPool(32).map(slow_command, list_of_things) Это кажется очень простым, не так ли? Ну, я на днях пытался что-то распараллелить на Java (правда, на Scala), и это оказалось совсем не так просто. Поэтому я хотел рассказать вам о некоторых запутанных вещах, с которыми я столкнулся. Моя задача: запустить своего рода медленную функцию на 60 миллионах вещей. Он уже был распараллелен, но использовал только 8 из 32 ядер процессора. Я хотел, чтобы он использовал ВСЕ ИХ. Эту задачу можно было тривиально распараллелить, поэтому я думал, что это будет легко. заблокированные потокиОдна из первых вещей, которую я начал видеть, когда я посмотрел на свою программу с YourKit (отличный профайлер для JVM), был примерно таким (взято отсюда): Что это было красная штука?! Мои темы были «заблокированы». Что такое заблокированный поток? В Java поток «блокируется», когда он ожидает «монитор» на объекте. Когда я сначала погуглил, я подумал: «Эээ, что такое монитор?». Это когда вы используете синхронизацию, чтобы два разных потока не выполняли один и тот же код одновременно. // псевдокод scala класс Бла { переменная х = 1 защита plus_one () { это.синхронизированный { х += 1 } } } Эта синхронизация Две вещи, которые блокировали мои потоки:
ожидающие темыИтак, я разблокировал несколько своих тем. Я думал, что выигрываю. Это было лишь отчасти правдой. Теперь многие мои темы были оранжевыми. Оранжевый означает, что треды похожи на «эй-ай-ай, я готов, но мне нечего делать». В этот момент мой код выглядел так: def doStuff(pool: FuturePool) { // FuturePool — это пул потоков пока не сделано { строки var = чтение_с_диска var parsedStuff = синтаксический анализ (строки) pool. submit(parsedSuff.map{expensiveFunction}) } } Это была очень хорошая функция. Я отправлял работу в пул! Работа шла! В параллели! Но мой основной поток выполнял всю работу по отправке. И вы видите, что главное: есть над чем работать! main: начать разбор пул потоков: хорошо, я готов к большему main: Я ВСЕ ЕЩЕ РАБОТАЮ main: хорошо, вот еще работа Основной поток не смог отправить дополнительную работу в пул потоков, потому что он был слишком занят синтаксическим анализом! Это как если бы вы попросили 5-летнего ребенка замесить тесто для торта, когда вы делаете сложное кухонное дело, а он такой: ОК, ОК, ОК, ОК, ОК, ЧТО ДАЛЬШЕ, а вы ВСЕГО МИНУТУ. Очевидным решением здесь было поручить синтаксический анализ потокам! Потому что потокам не 5 лет, и они могут делать все, что может основной поток. Поэтому я переписал свою функцию примерно так: def doStuff(pool: FuturePool): // FuturePool — это пул потоков // убедитесь, что у него только 32 потока, чтобы он // не раскручивает баджиллион потоков пока не сделано { строки var = чтение_с_диска pool. submit(parsedSuff.map{parse}.map{expensiveFunction}) } ЗАМЕЧАТЕЛЬНО. Это было здорово, правда? Неправильно. Затем произошло следующее: Рабочие очереди Эта абстракция В Java вы обычно обрабатываете пулы потоков с помощью чего-то, называемого Допустим, я запускаю loop { если (имеет_доступный_поток) { available_thread. submit(queue.pop()) } } В моем случае я считывал кучу данных с диска. может быть 10 ГБ данных. И я отправлял все эти данные в рабочую очередь ExecutorService. Неудивительно, что очередь взорвалась и разбила мою программу. Я попытался исправить это, изменив внутреннюю очередь в ExecutorService на еще не сделаноЯ трачу на это 8 часов? более? Я пытался сделать небольшую работу на работе, но закончил тем, что работал над ней около полуночи, потому что это должно было быть второстепенной задачей, и я не мог оправдать тратить на нее больше рабочего времени. Я все еще не понимаю, как сделать то, что, как я думал, будет легко. Думаю, мне нужно сделать следующее:
Или, может быть, есть совсем простой способ, и это может занять у меня 5 минут! Такие вещи заставляют меня чувствовать себя глупо, но в очень хорошем и удивительном смысле. Теперь я знаю кучу вещей, которых раньше не знал о параллелизме в Java!! Раньше я чувствовал себя плохо, когда понимал, что не знаю, как работать с такими вещами. («потоки и рабочие очереди — не такая уж продвинутая концепция, джулия, что, если вы ужасный программист»). Теперь я не чувствую себя плохо, обычно я просто такой: ХОРОШО СЕГОДНЯ — ДЕНЬ, КОГДА Я УЗНАЮ ЭТО. А завтра я буду еще круче, чем сегодня. Что довольно круто =D АбстракцииЯ думаю, что абстракции пула потоков, с которыми я работаю в Scala, не самые лучшие абстракции. Не потому, что они не облегчают программирование с параллелизмом — они делают! Но лучшие абстракции, с которыми я работаю (сетевой уровень TCP/IP! каналы unix!) позволяют мне использовать их годами, ни в малейшей степени не понимая, как они работают. |