en
Feedback
Java | LeetCode

Java | LeetCode

Open in Telegram

Π‘Π°ΠΉΡ‚: https://easyoffer.ru/ ВсС ΠΊΠ°Π½Π°Π»Ρ‹: t.me/+xGeAw6ckJ4liYzQy ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚ для Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹: @easyoffer_adv

Show more
6 521
Subscribers
-324 hours
-207 days
-4730 days
Posts Archive
Π’ΠΈΡ‚Π°ΠœΠΈΡˆΠΊΠΈ - ΠΌΠΎΡ‰Π½Ρ‹ΠΉ заряд дСтского ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚Π°! Π—ΠΈΠΌΠΎΠΉ дСтский ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΌ особСнно нуТдаСтся Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΠΆΠ΅ Π±ΠΎΠ»Π΅Ρ‚ΡŒ, ΡƒΠΊΡ€Π΅ΠΏ
Π’ΠΈΡ‚Π°ΠœΠΈΡˆΠΊΠΈ - ΠΌΠΎΡ‰Π½Ρ‹ΠΉ заряд дСтского ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚Π°! Π—ΠΈΠΌΠΎΠΉ дСтский ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΌ особСнно нуТдаСтся Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΠΆΠ΅ Π±ΠΎΠ»Π΅Ρ‚ΡŒ, укрСпляйтС ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ питания, Ρ€Π΅ΠΆΠΈΠΌΠ° дня, достаточного сна, ΠΏΡ€ΠΎΠ³ΡƒΠ»ΠΎΠΊ Π½Π° свСТСм Π²ΠΎΠ·Π΄ΡƒΡ…Π΅, Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹Ρ… ΠΈΠ³Ρ€ Π½Π° ΡƒΠ»ΠΈΡ†Π΅ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π²ΠΈΡ‚Π°ΠΌΠΈΠ½ΠΎΠ² ΠΈ ΠΌΠΈΠ½Π΅Ρ€Π°Π»ΠΎΠ². ✨ Π’ΠΈΡ‚Π°ΠœΠΈΡˆΠΊΠΈ Smart Fruits IMMUNO+ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·ΠΈΠΌΠ½ΠΈΠΉ Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… микроэлСмСнтов. βœ… Π’ Π½ΠΈΡ… содСрТатся всС Π²Π°ΠΆΠ½Ρ‹Π΅ Π²ΠΈΡ‚Π°ΠΌΠΈΠ½Ρ‹ ΠΈ ΠΌΠΈΠ½Π΅Ρ€Π°Π»Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ экстракт ΠΎΠ±Π»Π΅ΠΏΠΈΡ…ΠΈ для укрСплСния ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΌΠ° Π² сСзон простуд ΠΈ вирусов. βœ… Π’ΠΈΡ‚Π°ΠœΠΈΡˆΠΊΠΈ ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ риск развития простудных Π·Π°Π±ΠΎΠ»Π΅Π²Π°Π½ΠΈΠΉ. βœ… Π‘Π΄Π΅Π»Π°Π½Ρ‹ Π½Π° основС Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… соков, Π±Π΅Π· краситСлСй ΠΈ вкусовых Π΄ΠΎΠ±Π°Π²ΠΎΠΊ. Π’ΠΈΡ‚Π°ΠΌΠΈΡˆΠΊΠΈ Smart Fruits - Π΄Π΅Ρ‚ΠΈ ΠΎΠ±ΠΎΠΆΠ°ΡŽΡ‚, ΠΌΠ°ΠΌΡ‹ - Π΄ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚! ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° сайт НС являСтся лСкарством. #Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° vitamishki.ru О Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°Ρ‚Π΅Π»Π΅

Π—Π°Π΄Π°Ρ‡Π°: 722. Remove Comments Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π”Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C++, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΈΠ· Π½Π΅Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставляСт собой массив строк source, Π³Π΄Π΅ source[i] - это i-я строка исходного ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ разбиСния исходной строки исходного ΠΊΠΎΠ΄Π° символом Π½ΠΎΠ²ΠΎΠΉ строки '\n'. Π’ C++ сущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²: строчныС ΠΈ Π±Π»ΠΎΡ‡Π½Ρ‹Π΅. Π‘Ρ‚Ρ€ΠΎΠΊΠ° "//" ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ строчный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ символы справа ΠΎΡ‚ Π½Π΅Π³ΠΎ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ строкС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π‘Ρ‚Ρ€ΠΎΠΊΠ° "/*" ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±Π»ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС символы Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ (Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ) вхоТдСния "*/" Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. (Π—Π΄Π΅ΡΡŒ вхоТдСния происходят Π² порядкС чтСния: строка Π·Π° строкой слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ.) Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятно, строка "/*/" Π΅Ρ‰Π΅ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π±Π»ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΠΎ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ эффСктивный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. НапримСр, Ссли строка "//" встрСчаСтся Π² Π±Π»ΠΎΡ‡Π½ΠΎΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΎΠ½Π° игнорируСтся. Аналогично, Ссли строка "/*" встрСчаСтся Π² строчном ΠΈΠ»ΠΈ Π±Π»ΠΎΡ‡Π½ΠΎΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ игнорируСтся. Если послС удалСния ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² опрСдСлСнная строка ΠΊΠΎΠ΄Π° оказываСтся пустой, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ эту строку: каТдая строка Π² спискС ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ нСпустой. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: source = ["/*Test program */", "int main()", "{ ", "  // variable declaration ", "int a, b, c;", "/* This is a test", "   multiline  ", "   comment for ", "   testing */", "a = b + c;", "}"]
Output: ["int main()","{ ","  ","int a, b, c;","a = b + c;","}"]
πŸ‘¨β€πŸ’» Алгоритм: 1⃣БоздайтС строку buffer для хранСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки ΠΊΠΎΠ΄Π° Π±Π΅Π· ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈ Ρ„Π»Π°Π³ inBlock для отслСТивания, находимся Π»ΠΈ ΠΌΡ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ коммСнтария. 2βƒ£ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС source ΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ символу Π² этой строкС, обрабатывая ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ: Если встрСчСн Π±Π»ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ /*, установитС Ρ„Π»Π°Π³ inBlock ΠΈ пропуститС символы Π΄ΠΎ */. Если встрСчСн строчный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ //, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки. Если Π½Π΅ находимся Π²Π½ΡƒΡ‚Ρ€ΠΈ коммСнтария, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ символ Π² buffer. 3βƒ£ΠŸΠΎΡΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх строк Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ нСпустыС строки ΠΈΠ· buffer Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. 😎 РСшСниС:
import java.util.*;

public class Solution {
    public List<String> removeComments(String[] source) {
        boolean inBlock = false;
        StringBuilder buffer = new StringBuilder();
        List<String> result = new ArrayList<>();
        
        for (String line : source) {
            int i = 0;
            if (!inBlock) buffer = new StringBuilder();
            while (i < line.length()) {
                if (!inBlock && i + 1 < line.length() && line.charAt(i) == '/' && line.charAt(i + 1) == '*') {
                    inBlock = true;
                    i++;
                } else if (inBlock && i + 1 < line.length() && line.charAt(i) == '*' && line.charAt(i + 1) == '/') {
                    inBlock = false;
                    i++;
                } else if (!inBlock && i + 1 < line.length() && line.charAt(i) == '/' && line.charAt(i + 1) == '/') {
                    break;
                } else if (!inBlock) {
                    buffer.append(line.charAt(i));
                }
                i++;
            }
            if (!inBlock && buffer.length() > 0) {
                result.add(buffer.toString());
            }
        }
        return result;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨ ΠšΠ°Π½Π°Π»Ρ‹ с Junior IT вакансиями ΠΈ стаТировками ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡΡ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ свой ΠΎΡ„Ρ„Π΅Ρ€ 🀘 1. Π‘Ρ‚Π°ΠΆΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ваканс
πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨πŸ‘¨ ΠšΠ°Π½Π°Π»Ρ‹ с Junior IT вакансиями ΠΈ стаТировками ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡΡ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ свой ΠΎΡ„Ρ„Π΅Ρ€ 🀘 1. Π‘Ρ‚Π°ΠΆΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ вакансии ΠΏΠΎ России ΠΈ ΠΌΠΈΡ€Ρƒ 2. IT вакансии ΠΏΠΎ БНГ 3. IT стаТировки ΠΏΠΎ БНГ 4. ИИ-ассистСнт для Π°Π²Ρ‚ΠΎΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠ² 5. DIGITAL ΠΈ IT стаТировки ΠΈ вакансии 6. IT стаТировки Π² Ρ‚ΠΎΠΏΠΎΠ²Ρ‹Ρ… компаниях ΠΌΠΈΡ€Π° 7. Π£Π΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ IT вакансии ΠΈ стаТировки 8. Python вакансии ΠΈ стаТировки 9. Π‘Π˜Π“Π’Π•Π₯ вакансии ΠΈ стаТировки 10. Design вакансии ΠΈ стаТировки 11. QA вакансии ΠΈ стаТировки 12. Junior вакансии ΠΈ стаТировки 13. Frontend вакансии ΠΈ вопросы собСсов 14. Вакансии ΠΈ стаТировки для Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠ² 15. Вакансии Π² русских стартапах Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ 16. Вакансии ΠΈ стаТировки для DevOps 17. Вакансии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π½Π° Π₯Π₯.Π Π£

Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½ для садоводов Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½ Ρ‚Π°Ρ€Ρ‹ для рассады ΠΈ саТСнцСв, ΠΎΡ‚ производитСля I ΠžΠΏΡ‚/Ρ€ΠΎΠ·Π½ΠΈΡ†Π° I Доставка ΠΏΠΎ России I Π‘Π°ΠΌΠΎΠ²Ρ‹Π²ΠΎΠ· Π² БПб I Π—Π°ΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅! ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° сайт #Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° paketrassada.ru О Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°Ρ‚Π΅Π»Π΅

Π—Π°Π΄Π°Ρ‡Π°: 1422. Maximum Score After Splitting a String Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: easy Π”Π°Π½Π° строка s ΠΈΠ· Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ максимальноС количСство ΠΎΡ‡ΠΊΠΎΠ² послС разбиСния строки Π½Π° Π΄Π²Π΅ нСпустыС подстроки (Ρ‚.Π΅. Π»Π΅Π²ΡƒΡŽ подстроку ΠΈ ΠΏΡ€Π°Π²ΡƒΡŽ подстроку). ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΡ‡ΠΊΠΎΠ² послС разбиСния строки - это количСство Π½ΡƒΠ»Π΅ΠΉ Π² Π»Π΅Π²ΠΎΠΉ подстрокС плюс количСство Π΅Π΄ΠΈΠ½ΠΈΡ† Π² ΠΏΡ€Π°Π²ΠΎΠΉ подстрокС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: s = "011101"
Output: 5 
Explanation: 
All possible ways of splitting s into two non-empty substrings are:
left = "0" and right = "11101", score = 1 + 4 = 5 
left = "01" and right = "1101", score = 1 + 3 = 4 
left = "011" and right = "101", score = 1 + 2 = 3 
left = "0111" and right = "01", score = 1 + 1 = 2 
left = "01110" and right = "1", score = 2 + 1 = 3
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠŸΠΎΡΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ количСство Π΅Π΄ΠΈΠ½ΠΈΡ† Π² строкС ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ счётчики Π½ΡƒΠ»Π΅ΠΉ ΠΈ максимального значСния. 2βƒ£ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ символы строки Π΄ΠΎ прСдпослСднСго символа, обновляя счётчики Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†. 3βƒ£ΠžΠ±Π½ΠΎΠ²Π»ΡΠΉΡ‚Π΅ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли тСкущая сумма Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ† большС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ максимума. 😎 РСшСниС:
class Solution {
    public int maxScore(String s) {
        int ones = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '1') {
                ones++;
            }
        }
        
        int ans = 0;
        int zeros = 0;
        for (int i = 0; i < s.length() - 1; i++) {
            if (s.charAt(i) == '1') {
                ones--;
            } else {
                zeros++;
            }
            
            ans = Math.max(ans, zeros + ones);
        }
        
        return ans;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 210. Course Schedule II Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium ВсСго Π΅ΡΡ‚ΡŒ numCourses курсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ, ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ 0 Π΄ΠΎ numCourses - 1. Π’Π°ΠΌ Π΄Π°Π½ массив prerequisites, Π³Π΄Π΅ prerequisites[i] = [ai, bi] ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΏΡ€ΠΎΠΉΡ‚ΠΈ курс bi, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π·ΡΡ‚ΡŒ курс ai. НапримСр, ΠΏΠ°Ρ€Π° [0, 1] ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для прохоТдСния курса 0 сначала Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ курс 1. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ порядок курсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ всС курсы. Если сущСствуСт нСсколько ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ любой ΠΈΠ· Π½ΠΈΡ…. Если Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ всС курсы, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ пустой массив. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]]
Output: [0,2,1,3]
ОбъяснСниС: ВсСго Π΅ΡΡ‚ΡŒ 4 курса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π·ΡΡ‚ΡŒ курс 3, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Π° курса 1 ΠΈ 2. Оба курса 1 ΠΈ 2 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ взяты послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ курс 0.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… порядков курсов β€” [0,1,2,3]. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ порядок β€” [0,2,1,3].
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ построСниС Π³Ρ€Π°Ρ„Π°: Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ стСк S, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ топологичСски отсортированный порядок курсов Π² нашСм Π³Ρ€Π°Ρ„Π΅. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ список смСТности, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Ρ‹ Ρ€Π΅Π±Π΅Ρ€, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π΅. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π° Π²ΠΈΠ΄Π° [a, b] ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ курс b Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π·ΡΡ‚ΡŒ курс a. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ€Π΅Π±Ρ€ΠΎ Π²ΠΈΠ΄Π° b βž” a. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅ это ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. 2⃣Запуск поиска Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ (DFS): Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π² нашСм Π³Ρ€Π°Ρ„Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ (DFS), Ссли этот ΡƒΠ·Π΅Π» Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» посСщСн Π²ΠΎ врСмя DFS Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ выполняСм поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ для ΡƒΠ·Π»Π° N. РСкурсивно ΠΎΠ±ΠΎΠΉΠ΄ΠΈΡ‚Π΅ всСх сосСдСй ΡƒΠ·Π»Π° N, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹. 3βƒ£ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΡƒΠ·Π»ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°: ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх сосСдСй Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡƒΠ·Π΅Π» N Π² стСк. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ стСк для модСлирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ порядка. Когда ΠΌΡ‹ добавляСм ΡƒΠ·Π΅Π» N Π² стСк, всС ΡƒΠ·Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΡƒΠ·Π΅Π» N Π² качСствС ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠ° (срСди Π΄Ρ€ΡƒΠ³ΠΈΡ…), ΡƒΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π² стСкС. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх ΡƒΠ·Π»ΠΎΠ² просто Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΡƒΠ·Π»Ρ‹ Π² порядкС ΠΈΡ… присутствия Π² стСкС ΠΎΡ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π΄ΠΎ основания. 😎 РСшСниС:
class Solution {
    static int WHITE = 1;
    static int GRAY = 2;
    static int BLACK = 3;

    boolean isPossible;
    Map<Integer, Integer> color;
    Map<Integer, List<Integer>> adjList;
    List<Integer> topologicalOrder;

    private void init(int numCourses) {
        this.isPossible = true;
        this.color = new HashMap<>();
        this.adjList = new HashMap<>();
        this.topologicalOrder = new ArrayList<>();
        for (int i = 0; i < numCourses; i++) {
            this.color.put(i, WHITE);
        }
    }

    private void dfs(int node) {
        if (!this.isPossible) return;
        this.color.put(node, GRAY);
        for (Integer neighbor : this.adjList.getOrDefault(node, new ArrayList<>())) {
            if (this.color.get(neighbor) == WHITE) {
                this.dfs(neighbor);
            } else if (this.color.get(neighbor) == GRAY) {
                this.isPossible = false;
            }
        }
        this.color.put(node, BLACK);
        this.topologicalOrder.add(node);
    }

    public int[] findOrder(int numCourses, int[][] prerequisites) {
        this.init(numCourses);
        for (int i = 0; i < prerequisites.length; i++) {
            int dest = prerequisites[i][0];
            int src = prerequisites[i][1];
            List<Integer> lst = adjList.getOrDefault(src, new ArrayList<>());
            lst.add(dest);
            adjList.put(src, lst);
        }
        for (int i = 0; i < numCourses; i++) {
            if (this.color.get(i) == WHITE) {
                this.dfs(i);
            }
        }
        if (this.isPossible) {
            int[] order = new int[numCourses];
            for (int i = 0; i < numCourses; i++) {
                order[i] = this.topologicalOrder.get(numCourses - i - 1);
            }
            return order;
        } else {
            return new int[0];
        }
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

ΠšΡƒΡ€ΡΡ‹ китайского языка с нуля Π΄ΠΎ ΠΏΡ€ΠΎΡ„ΠΈ. Онлайн ΠΈ ΠΎΡ‡Π½ΠΎ. πŸ‘ΠŸΠΎΠ²Ρ‹ΡˆΠ°ΠΉΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡Π°ΠΉΡ‚Π΅ с нуля. ПомоТСм ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ китайский Π»Π΅Π³
ΠšΡƒΡ€ΡΡ‹ китайского языка с нуля Π΄ΠΎ ΠΏΡ€ΠΎΡ„ΠΈ. Онлайн ΠΈ ΠΎΡ‡Π½ΠΎ. πŸ‘ΠŸΠΎΠ²Ρ‹ΡˆΠ°ΠΉΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡Π°ΠΉΡ‚Π΅ с нуля. ПомоТСм ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ китайский Π»Π΅Π³ΠΊΠΎ ΠΈ просто. βš‘ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΎΠ±Π½ΠΎΠ΅ занятиС - бСсплатно! βœ…Π”Π»Ρ бизнСса. βœ…Π”Π»Ρ обучСния. βœ…Π”Π»Ρ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠΉ. Для взрослых ΠΈ Π΄Π΅Ρ‚Π΅ΠΉ. Π˜Π½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ занятия ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. Π Π°Π·Π³ΠΎΠ²ΠΎΡ€Π½Ρ‹ΠΉ ΠΊΠ»ΡƒΠ±. Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ #Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° 16+ chinesecontact.ru О Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°Ρ‚Π΅Π»Π΅

Π—Π°Π΄Π°Ρ‡Π°: 344. Reverse String Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: easy ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ строку. Входная строка прСдставлСна Π² Π²ΠΈΠ΄Π΅ массива символов s. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, измСняя Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ массив Π½Π° мСстС с использованиСм O(1) Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: s = ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ: УстановитС Π΄Π²Π° указатСля: ΠΎΠ΄ΠΈΠ½ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ массива (left), Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π° ΠΊΠΎΠ½Π΅Ρ† массива (right). 2βƒ£ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° символов: Пока Π»Π΅Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ мСньшС ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ, обмСняйтС символы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π»Π΅Π²Ρ‹ΠΉ ΠΈ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π‘Π΄Π²ΠΈΠ½ΡŒΡ‚Π΅ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²ΠΏΡ€Π°Π²ΠΎ, Π° ΠΏΡ€Π°Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π»Π΅Π²ΠΎ. 3βƒ£Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹: ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΠΉΡ‚Π΅ шаг 2 Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π»Π΅Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ станСт большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π΅Π½ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ. 😎 РСшСниС:
public class Solution {
    public void reverseString(char[] s) {
        int left = 0, right = s.length - 1;
        while (left < right) {
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 765. Couples Holding Hands Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: hard Π•ΡΡ‚ΡŒ n ΠΏΠ°Ρ€, сидящих Π½Π° 2n мСстах, располоТСнных Π² ряд, ΠΈ ΠΎΠ½ΠΈ хотят Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π·Π° Ρ€ΡƒΠΊΠΈ. Π›ΡŽΠ΄ΠΈ ΠΈ мСста прСдставлСны массивом Ρ†Π΅Π»Ρ‹Ρ… чисСл row, Π³Π΄Π΅ row[i] β€” это ID Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, сидящСго Π½Π° i-ΠΌ мСстС. ΠŸΠ°Ρ€Ρ‹ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎ порядку: пСрвая ΠΏΠ°Ρ€Π° β€” (0, 1), вторая ΠΏΠ°Ρ€Π° β€” (2, 3) ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Π΄ΠΎ послСднСй ΠΏΠ°Ρ€Ρ‹ β€” (2n - 2, 2n - 1). Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ минимальноС количСство пСрСстановок, Ρ‡Ρ‚ΠΎΠ±Ρ‹ каТдая ΠΏΠ°Ρ€Π° сидСла рядом. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° состоит ΠΈΠ· Π²Ρ‹Π±ΠΎΡ€Π° Π»ΡŽΠ±Ρ‹Ρ… Π΄Π²ΡƒΡ… Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΡ‚Π°ΡŽΡ‚ ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: row = [0,2,1,3]
Output: 1
Explanation: We only need to swap the second (row[1]) and third (row[2]) person.
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π±Π΅Π· Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ людСй Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄ΠΈΠ²Π°Π½Π΅ счастливыми ΠΏΠΎ порядку, являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сильнСС, Ρ‡Π΅ΠΌ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Π° ΠΎ ΠΆΠ°Π΄Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, Π½ΠΎ каТСтся Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ ΠΏΠ°Ρ€Ρƒ счастливой. 2βƒ£ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, для ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π΄ΠΈΠ²Π°Π½Π° с нСсчастливыми людьми X ΠΈ Y, ΠΌΡ‹ Π»ΠΈΠ±ΠΎ замСняСм Y Π½Π° ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π° X, Π»ΠΈΠ±ΠΎ замСняСм X Π½Π° ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π° Y. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… возмоТностСй ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ. 3⃣Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΈΠ²Π°Π½Π° с двумя возмоТностями (Ρ‚.Π΅. ΠΎΠ±Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π½Π° Π΄ΠΈΠ²Π°Π½Π΅ нСсчастливы) ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ ΠΊΠ°ΠΊ ans1, Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠΌ наш Ρ…ΠΎΠ΄ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½Π°ΠΉΠ΄Π΅ΠΌ связанный ΠΎΡ‚Π²Π΅Ρ‚ ΠΊΠ°ΠΊ ans2, ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠΌ наш Ρ…ΠΎΠ΄ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ€Π½Π΅ΠΌ наимСньший ΠΎΡ‚Π²Π΅Ρ‚. 😎 РСшСниС:
class Solution {
    int N;
    int[][] pairs;

    public int minSwapsCouples(int[] row) {
        N = row.length / 2;
        pairs = new int[N][2];
        for (int i = 0; i < N; ++i) {
            pairs[i][0] = row[2 * i] / 2;
            pairs[i][1] = row[2 * i + 1] / 2;
        }
        return solve(0);
    }

    public void swap(int a, int b, int c, int d) {
        int t = pairs[a][b];
        pairs[a][b] = pairs[c][d];
        pairs[c][d] = t;
    }

    public int solve(int i) {
        if (i == N) return 0;
        int x = pairs[i][0], y = pairs[i][1];
        if (x == y) return solve(i + 1);

        int jx = 0, kx = 0, jy = 0, ky = 0;
        for (int j = i + 1; j < N; ++j) {
            for (int k = 0; k <= 1; ++k) {
                if (pairs[j][k] == x) { jx = j; kx = k; }
                if (pairs[j][k] == y) { jy = j; ky = k; }
            }
        }

        swap(i, 1, jx, kx);
        int ans1 = 1 + solve(i + 1);
        swap(i, 1, jx, kx);

        swap(i, 0, jy, ky);
        int ans2 = 1 + solve(i + 1);
        swap(i, 0, jy, ky);

        return Math.min(ans1, ans2);
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 759. Employee Free Time Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: hard Нам Π΄Π°Π½ список schedule of employees, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ врСмя ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сотрудника. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сотрудника Π΅ΡΡ‚ΡŒ список Π½Π΅ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ², ΠΈ эти ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ располоТСны Π² отсортированном порядкС. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ список ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ‰Π΅Π΅ свободноС врСмя ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ для всСх сотрудников, Ρ‚Π°ΠΊΠΆΠ΅ Π² отсортированном порядкС. (Π₯отя ΠΌΡ‹ прСдставляСм ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ΅ [x, y], ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°ΠΌΠΈ, Π° Π½Π΅ списками ΠΈΠ»ΠΈ массивами. НапримСр, schedule[0][0].start = 1, schedule[0][0].end = 2, Π° schedule[0][0][0] Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ).Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² наш ΠΎΡ‚Π²Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Ρ‚ΠΈΠΏΠ° [5, 5], Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: schedule = [[[1,2],[5,6]],[[1,3]],[[4,10]]]
Output: [[3,4]]
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ всС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ всСх сотрудников Π² ΠΎΠ΄ΠΈΠ½ список ΠΈ отсортируйтС Π΅Π³ΠΎ ΠΏΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌ. 2βƒ£ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π² ΠΎΠ΄ΠΈΠ½. 3⃣НайдитС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°ΠΌΠΈ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ свободноС врСмя. 😎 РСшСниС:
import java.util.*;

class Interval {
    public int start;
    public int end;
    public Interval(int start, int end) {
        this.start = start;
        this.end = end;
    }
}

public class Solution {
    public List<Interval> employeeFreeTime(List<List<Interval>> schedule) {
        List<Interval> intervals = new ArrayList<>();
        for (List<Interval> employee : schedule) {
            intervals.addAll(employee);
        }
        
        intervals.sort((a, b) -> Integer.compare(a.start, b.start));
        
        List<Interval> merged = new ArrayList<>();
        for (Interval interval : intervals) {
            if (merged.isEmpty() || merged.get(merged.size() - 1).end < interval.start) {
                merged.add(interval);
            } else {
                merged.get(merged.size() - 1).end = Math.max(merged.get(merged.size() - 1).end, interval.end);
            }
        }
        
        List<Interval> freeTime = new ArrayList<>();
        for (int i = 1; i < merged.size(); i++) {
            if (merged.get(i).start > merged.get(i - 1).end) {
                freeTime.add(new Interval(merged.get(i - 1).end, merged.get(i).start));
            }
        }
        
        return freeTime;
    }
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π˜Ρ‰Ρƒ ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π½Π° Π’Π‘! Π Π°Π±ΠΎΡ‚Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΊΠ΅ с Π·ΠΏ Π΄ΠΎ150 000 Ρ€ΡƒΠ±Π»Π΅ΠΉ Π² мСсяц. Π‘Π΅Π· ΠΎΠΏΡ‹Ρ‚Π°, Π½ΡƒΠΆΠ΅Π½ Ρ‚
Π˜Ρ‰Ρƒ ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π½Π° Π’Π‘! Π Π°Π±ΠΎΡ‚Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΊΠ΅ с Π·ΠΏ Π΄ΠΎ150 000 Ρ€ΡƒΠ±Π»Π΅ΠΉ Π² мСсяц. Π‘Π΅Π· ΠΎΠΏΡ‹Ρ‚Π°, Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, Π·Π°Π½ΡΡ‚ΠΎΡΡ‚ΡŒ 3-6 часов Π² дСнь. ВсСму ΠΎΠ±ΡƒΡ‡Π°Ρ‚ Π½Π° бСсплатном курсС ΠΈ послС Π²ΠΎΠ·ΡŒΠΌΡƒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ: βœ… 3 дня ΡƒΡ€ΠΎΠΊΠΎΠ² ΠΏΠΎ 30 ΠΌΠΈΠ½ΡƒΡ‚ βœ… Π”ΠΎΠΌΠ°ΡˆΠΊΠΈ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΈ ΠΎΠΏΠ»Π°Ρ‚ΠΎΠΉ бонусами βœ… ΠŸΠ»Π°Ρ‡Ρƒ 10 тыс Π·Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ Π΄ΠΎΠΌΠ°ΡˆΠΊΡƒ ВсС ΠΊΡ‚ΠΎ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ курс, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ сСртификат ΠΎΡ‚ ΡˆΠΊΠΎΠ»Ρ‹ с ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ. ⚑ Набор заканчиваСтся Π·Π°Π²Ρ‚Ρ€Π°. πŸ‘ Для рСгистрации ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ "Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ" Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ #Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° 16+ course.wildmanager.ru О Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°Ρ‚Π΅Π»Π΅

Π—Π°Π΄Π°Ρ‡Π°: 1434. Number of Ways to Wear Different Hats to Each Other Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: hard Π”Π°Π½ΠΎ n Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΈ 40 Π²ΠΈΠ΄ΠΎΠ² шляп, ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ 1 Π΄ΠΎ 40. Π”Π°Π½ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ цСлочислСнный массив hats, Π³Π΄Π΅ hats[i] β€” список всСх шляп, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… i-ΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ. Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ количСство способов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ n Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠ³ΡƒΡ‚ Π½ΠΎΡΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡˆΠ»ΡΠΏΡ‹ Π΄Ρ€ΡƒΠ³ Ρƒ Π΄Ρ€ΡƒΠ³Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слишком большим, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 10^9 + 7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: hats = [[3,4],[4,5],[5]]
Output: 1
Explanation: There is only one way to choose hats given the conditions. 
First person choose hat 3, Second person choose hat 4 and last one hat 5.
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: n - количСство людСй, done = 2^n - 1, MOD = 10^9 + 7, memo - Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 41 * done, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ -1, ΠΈ hatsToPeople - ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ шляп Π½Π° людСй. 2βƒ£Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ hatsToPeople, сопоставив ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΡˆΠ»ΡΠΏΡƒ людям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‘ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dp(hat, mask), которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡŽ для вычислСния количСства способов распрСдСлСния шляп. 3βƒ£Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° dp(1, 0), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт основноС вычислСниС количСства способов распрСдСлСния шляп. 😎 РСшСниС:
class Solution {
    int[][] memo;
    int done;
    int n;
    int MOD = 1000000007;
    Map<Integer, ArrayList<Integer>> hatsToPeople;
    
    public int numberWays(List<List<Integer>> hats) {
        n = hats.size();
        
        hatsToPeople = new HashMap<>();
        for (int i = 0; i < n; i++) {
            for (int hat: hats.get(i)) {
                hatsToPeople.computeIfAbsent(hat, k -> new ArrayList<>()).add(i);
            }
        }
        
        done = (1 << n) - 1;
        memo = new int[41][done];
        
        for (int i = 0; i < 41; i++) {
            Arrays.fill(memo[i], -1);
        }
        
        return dp(1, 0);
    }
    
    private int dp(int hat, int mask) {
        if (mask == done) {
            return 1;
        }
        
        if (hat > 40) {
            return 0;
        }
        
        if (memo[hat][mask] != -1) {
            return memo[hat][mask];
        }
        
        int ans = dp(hat + 1, mask);
        
        if (hatsToPeople.containsKey(hat)) {
            for (int person: hatsToPeople.get(hat)) {
                if ((mask & (1 << person)) == 0) {
                    ans = (ans + dp(hat + 1, mask | (1 << person))) % MOD;
                }
            }
        }
        
        memo[hat][mask] = ans;
        return ans;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Онлайн-школа программирования Kata Academy Гарантия трудоустройства послС обучСния. Π—ΠŸ ΠΎΡ‚ 120 000Ρ€ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π² Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅ Π₯ΠΎΡ‡Π΅ΡˆΡŒ Π²ΠΎΠΉΡ‚ΠΈ Π² IT, Π½ΠΎ Ρƒ тСбя ноль ΠΎΠΏΡ‹Ρ‚Π°? Kata Academy β€” это Ρ‚Π²ΠΎΠΉ шанс обрСсти Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΡŽ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Онлайн-ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ позволяСт ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΠ· любого Π³ΠΎΡ€ΠΎΠ΄Π°. πŸ’» ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈ Π½Π° сайт ΠΈ оставляй заявку – расскаТСм подробности ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ обучСния. Начни свой ΠΏΡƒΡ‚ΡŒ Π² IT вмСстС с Kata Academy – ΠΌΡ‹ тСбя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС! πŸŽ“ ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° сайт #Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° 16+ kata.academy О Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠ΄Π°Ρ‚Π΅Π»Π΅

Π—Π°Π΄Π°Ρ‡Π°: 910. Smallest Range II Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π’Π°ΠΌ Π΄Π°Π½ цСлочислСнный массив nums ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число k. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ индСкса i, Π³Π΄Π΅ 0 <= i < nums.length, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ nums[i] Π½Π° nums[i] + k ΠΈΠ»ΠΈ nums[i] - k. ΠžΡ†Π΅Π½ΠΊΠ° nums - это Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтами Π² nums. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ nums послС измСнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ индСксС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: nums = [1], k = 0
Output: 0
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив nums. 2βƒ£Π Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтами. 3βƒ£ΠŸΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСм элСмСнтам массива, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ, измСняя Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт Π½Π° +k ΠΈ -k ΠΈ вычисляя Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния массива. 😎 РСшСниС:
import java.util.Arrays;

class Solution {
    public int smallestRangeII(int[] nums, int k) {
        Arrays.sort(nums);
        int n = nums.length;
        int minVal = nums[0];
        int maxVal = nums[n - 1];
        int result = maxVal - minVal;

        for (int i = 0; i < n - 1; i++) {
            int high = Math.max(nums[i] + k, maxVal - k);
            int low = Math.min(nums[i + 1] - k, minVal + k);
            result = Math.min(result, high - low);
        }

        return result;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 981. Time Based Key-Value Store Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π‘ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ структуру Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° основС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π° Π² Ρ€Π°Π·Π½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ класс TimeMap: TimeMap() Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ структуры Π΄Π°Π½Π½Ρ‹Ρ…. void set(String key, String value, int timestamp) БохраняСт ΠΊΠ»ΡŽΡ‡ key с Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ value Π² Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ врСмя timestamp. String get(String key, int timestamp) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊΠΎΠ΅ Ρ‡Ρ‚ΠΎ set Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ Ρ€Π°Π½Π΅Π΅ с timestamp_prev <= timestamp. Если Ρ‚Π°ΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ нСсколько, возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, связанноС с наибольшим timestamp_prev. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚, возвращаСтся "". ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input
["TimeMap", "set", "get", "get", "set", "get", "get"]
[[], ["foo", "bar", 1], ["foo", 1], ["foo", 3], ["foo", "bar2", 4], ["foo", 4], ["foo", 5]]
Output
[null, null, "bar", "bar", null, "bar2", "bar2"]
πŸ‘¨β€πŸ’» Алгоритм: 1⃣БоздайтС hashmap keyTimeMap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ строку Π² качСствС ΠΊΠ»ΡŽΡ‡Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ hashmap Π² качСствС значСния, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅. 2⃣В Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ set() сохранитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ timestamp Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ ΠΊΠ»ΡŽΡ‡Π° keyTimeMap, Ρ‚.Π΅. keyTimeMap[key][timestamp] = value. 3⃣В Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ get() ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎ всСм Π²Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌ Π² порядкС убывания ΠΎΡ‚ timestamp Π΄ΠΎ 1. Для любого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ссли сущСствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ ΠΊΠ»ΡŽΡ‡Π°, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Π² ΠΊΠΎΠ½Ρ†Π΅ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΏΡƒΡΡ‚ΡƒΡŽ строку. 😎 РСшСниС:
import java.util.*;

class TimeMap {
    private Map<String, TreeMap<Integer, String>> keyTimeMap;

    public TimeMap() {
        keyTimeMap = new HashMap<>();
    }

    public void set(String key, String value, int timestamp) {
        keyTimeMap.computeIfAbsent(key, k -> new TreeMap<>()).put(timestamp, value);
    }

    public String get(String key, int timestamp) {
        if (!keyTimeMap.containsKey(key)) {
            return "";
        }
        TreeMap<Integer, String> times = keyTimeMap.get(key);
        for (int currTime = timestamp; currTime >= 1; --currTime) {
            if (times.containsKey(currTime)) {
                return times.get(currTime);
            }
        }
        return "";
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 214. Shortest Palindrome Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: hard Π”Π°Π½Π° строка s. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ s Π² ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² символы Π² Π½Π°Ρ‡Π°Π»ΠΎ строки. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ самый ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, выполняя это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: s = "aacecaaa"
Output: "aaacecaaa"
πŸ‘¨β€πŸ’» Алгоритм: 1⃣БозданиС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ строки: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ строку rev ΠΎΡ‚ исходной строки s, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ для сравнСния. 2βƒ£Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ для поиска наибольшСго ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠ°: ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ индСкс i ΠΎΡ‚ 0 Π΄ΠΎ size(s) - 1. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ провСряйтС, Ρ€Π°Π²Π½Π° Π»ΠΈ подстрока s ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ n - i подстрокС rev ΠΎΡ‚ i Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки. Если условиС выполняСтся, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ подстрока s ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ n - i являСтся ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠΎΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ rev являСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ строкой s. 3⃣Возврат Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°: Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΉΠ΄Π΅Π½ наибольший ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ строку, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ подстроки rev ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ i + исходная строка s. 😎 РСшСниС:
class Solution {
    public String shortestPalindrome(String s) {
        int n = s.length();
        String rev = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < n; i++) {
            if (s.substring(0, n - i).equals(rev.substring(i))) return (
                rev.substring(0, i) + s
            );
        }
        return "";
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 995. Minimum Number of K Consecutive Bit Flips Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: hard Π”Π°Π½ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ массив nums ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число k. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€ΠΎΡ‚Π° k-Π±ΠΈΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π±ΠΎΡ€Π΅ подмассива Π΄Π»ΠΈΠ½ΠΎΠΉ k ΠΈΠ· nums ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ 0 Π² подмассивС Π½Π° 1 ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ 1 Π² подмассивС Π½Π° 0. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ минимальноС количСство k-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€ΠΎΡ‚ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² массивС Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ 0. Если это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ -1. Подмассив - это нСпрСрывная Ρ‡Π°ΡΡ‚ΡŒ массива. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: nums = [0,1,0], k = 1
Output: 2
Explanation: Flip nums[0], then flip nums[2].
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ массив flip, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, сколько Ρ€Π°Π· Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ flips для отслСТивания количСства Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€ΠΎΡ‚ΠΎΠ². 2βƒ£ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов массива: Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ, учитывая Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ количСство ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€ΠΎΡ‚ΠΎΠ² ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массивС. Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ счСтчик ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€ΠΎΡ‚ΠΎΠ² ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ массив flip. 3βƒ£ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° возмоТности выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ: Если количСство ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€ΠΎΡ‚ΠΎΠ² большС Π΄Π»ΠΈΠ½Ρ‹ массива, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ -1. 😎 РСшСниС:
public class Solution {
    public int minKBitFlips(int[] nums, int k) {
        int n = nums.length;
        int flip = 0;
        int flips = 0;
        int[] flipQueue = new int[n];
        
        for (int i = 0; i < n; i++) {
            if (i >= k) {
                flip ^= flipQueue[i - k];
            }
            if (nums[i] == flip) {
                if (i + k > n) return -1;
                flips++;
                flip ^= 1;
                flipQueue[i] = 1;
            }
        }
        return flips;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Как frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ„Ρ„Π΅Ρ€ Π² Big Tech? ΠŸΠ»Π°Ρ‚ΡΡ‚ ΠΊΠ°ΠΊ Π΄ΠΆΡƒΠ½Ρƒ, Π° ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ с Π»ΠΈΠ΄Π° πŸ™„ Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π° Π½Π΅ растёт, Π·Π°Π΄Π°Ρ‡ΠΈ
Как frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ„Ρ„Π΅Ρ€ Π² Big Tech? ΠŸΠ»Π°Ρ‚ΡΡ‚ ΠΊΠ°ΠΊ Π΄ΠΆΡƒΠ½Ρƒ, Π° ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ с Π»ΠΈΠ΄Π° πŸ™„ Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π° Π½Π΅ растёт, Π·Π°Π΄Π°Ρ‡ΠΈ скучныС. ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΡˆΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°Ρ‚ΡŒΡΡ, Π½ΠΎ Π½Π° Ρ€Π΅Π·ΡŽΠΌΠ΅ ΠΊΠ»ΡŽΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΡƒΠ½Π΅ΠΉΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π° Π½Π° собСсах валят Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ…? ΠŸΡ€ΠΈ этом Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ постоянно ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ„Ρ„Π΅Ρ€Ρ‹ Π² ЯндСкс ΠΈΠ»ΠΈ VK... Π‘Ρ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ с малСнькой Π·ΠΏ, ΠΈΠ»ΠΈ дСстрой Ρ€Ρ‹Π½ΠΊΠ° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ? Биняя ΠΈΠ»ΠΈ красная Ρ‚Π°Π±Π»Π΅Ρ‚ΠΊΠ°, НСо?! πŸ‘Ύ
МСня Π·ΠΎΠ²ΡƒΡ‚ Π’ΠΈΡ…ΠΎΠ½, ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π― β€” Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈ ΠΌΠ΅Π½Ρ‚ΠΎΡ€.
Помогаю ΡƒΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ Π½Π° Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Big Tech ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽ Π½Π° ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ срокС. Π’ своСм ΠΊΠ°Π½Π°Π»Π΅: πŸ‘‰Π Π°Π·Π±ΠΈΡ€Π°ΡŽ самыС популярныС ΠΈ ΠΊΠ°Π²Π΅Ρ€Π·Π½Ρ‹Π΅ вопросы Π½Π° собСсах πŸ‘‰Π Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ HR πŸ‘‰Π‘ΠΎΡ€ΡŽΡΡŒ с убСТдСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ πŸ‘‰Π”Π΅Π»ΡŽΡΡŒ Π»Π°ΠΉΡ„Ρ…Π°ΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ β€œΠΏΠΈΠ½Π³ΠΎΠ²Π°Ρ‚ΡŒβ€ Ρ€Π΅ΠΊΡ€ΡƒΡ‚Π΅Ρ€ΠΎΠ² РСгулярно ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹: β–ͺ️60 вопросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π΅Π±Π΅ Π½Π° собСсСдовании. β–ͺοΈΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· 100+ ΠΊΠ°Π½Π°Π»ΠΎΠ² с вакансиями для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² β–ͺ️10 задротских вопросов ΠΏΡ€ΠΎ JavaScript, послС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Ρ‹ ΡƒΡΠΎΠΌΠ½ΠΈΡˆΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ знаСшь JS. Π§Π°ΡΡ‚ΡŒ 1 β–ͺ️ЧСк лист ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ своСго Ρ€Π΅Π·ΡŽΠΌΠ΅ ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡΡ, нас ΡƒΠΆΠ΅ 4500 πŸ€“: ссылка Π Π΅ΠΊΠ»Π°ΠΌΠ°, erid 2W5zFJsgVhi: ИП Π“Π°Π»Π°ΠΊΡ‚ΠΈΠΎΠ½ΠΎΠ² Π’ΠΈΡ…ΠΎΠ½ Π’ΠΈΡ‚Π°Π»ΡŒΠ΅Π²ΠΈΡ‡, ИНН 771618975809

Π—Π°Π΄Π°Ρ‡Π°: 186. Reverse Words in a String II Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π”Π°Π½ массив символов s, ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ порядок слов. Π‘Π»ΠΎΠ²ΠΎ опрСдСляСтся ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ. Π‘Π»ΠΎΠ²Π° Π² s Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ. Π’Π°Ρˆ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° мСстС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· выдСлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ пространства. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: s = ["a"]
Output: ["a"]
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ всю строку: ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ reverse, которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ вСсь массив символов ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°. 2βƒ£ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово: ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ всСй строкС, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ слова ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ reverse для пСрСворачивания символов Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ слова. 3βƒ£ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ словами оставался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π΅Π», ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ лишниС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ ΠΊΠΎΠ½Ρ†Π΅ строки, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. 😎 РСшСниС:
class Solution {
    public void reverse(char[] s, int left, int right) {
        while (left < right) {
            char tmp = s[left];
            s[left++] = s[right];
            s[right--] = tmp;
        }
    }

    public void reverseEachWord(char[] s) {
        int n = s.length;
        int start = 0, end = 0;

        while (start < n) {
            while (end < n && s[end] != ' ') ++end;
            reverse(s, start, end - 1);            start = end + 1;
            ++end;
        }
    }

    public void reverseWords(char[] s) {
        reverse(s, 0, s.length - 1);
        reverseEachWord(s);
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

CΡ‚Π°ΠΆΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ вакансии для JAVA Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². - Вакансии ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π½Π° Π΄ΠΆΠΎΠ±-Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΡ€Π°Ρ… - Волько прямыС ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ HR Π² Telegr
CΡ‚Π°ΠΆΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ вакансии для JAVA Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². - Вакансии ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π½Π° Π΄ΠΆΠΎΠ±-Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΡ€Π°Ρ… - Волько прямыС ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ HR Π² Telegram πŸ‘‰ @jobs_java πŸ€– ML & DS πŸ‘©β€πŸ’» DevOps πŸ‘¨β€βœˆοΈ Π˜Π‘ & OSINT πŸ‘£ Go πŸ‘©β€πŸ’» Mobile πŸ‘©β€πŸ’» C# πŸ‘©β€πŸ’» Node.js πŸ‘©β€πŸ’» Python πŸ”Ž QA πŸ‘©β€πŸ’» Java πŸ‘©β€πŸ’» UX/UI πŸ‘©β€πŸ’» Frontend πŸ–ΌοΈ PHP πŸ“‹ Analyst πŸ’Ό 1C πŸ–₯ SQL πŸ‘©β€πŸ’» IT HR Пока Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π»ΠΈΡΡ‚Π°ΡŽΡ‚ Π΄ΠΆΠΎΠ±-сайты β€” Ρ‚Ρ‹ ΡƒΠΆΠ΅ пишСшь HR Π² Telegram.