uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi πŸ‘‰ Belgini koβ€˜rmoqchi boβ€˜lsangiz, obuna boβ€˜ling

C# | LeetCode

C# | LeetCode

Kanalga Telegram’da oβ€˜tish

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

Ko'proq ko'rsatish
3 163
Obunachilar
-224 soatlar
-127 kun
-2830 kun
Postlar arxiv
Π—Π°Π΄Π°Ρ‡Π°: 1376. Time Needed to Inform All Employees Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π’ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ n сотрудников, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… присвоСн ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΡ‚ 0 Π΄ΠΎ n - 1. Π ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ headID. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сотрудника Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ нСпосрСдствСнный Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² массивС manager, Π³Π΄Π΅ manager[i] β€” это нСпосрСдствСнный Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊ i-Π³ΠΎ сотрудника, manager[headID] = -1. Π’Π°ΠΊΠΆΠ΅ гарантируСтся, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ подчинСния ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру. Π ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ всСм сотрудникам ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΡ€ΠΎΡ‡Π½ΡƒΡŽ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ. Он сообщит своим нСпосрСдствСнным ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌ, Π° ΠΎΠ½ΠΈ сообщат своим ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΏΠΎΠΊΠ° всС сотрудники Π½Π΅ ΡƒΠ·Π½Π°ΡŽΡ‚ ΠΎ срочной новости. i-ΠΉ сотрудник нуТдаСтся Π² informTime[i] ΠΌΠΈΠ½ΡƒΡ‚Π°Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ всСм своим нСпосрСдствСнным ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌ (Ρ‚.Π΅. Ρ‡Π΅Ρ€Π΅Π· informTime[i] ΠΌΠΈΠ½ΡƒΡ‚ всС Π΅Π³ΠΎ нСпосрСдствСнныС ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ). Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ количСство ΠΌΠΈΠ½ΡƒΡ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ всСм сотрудникам ΠΎ срочной новости. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: n = 6, headID = 2, manager = [2,2,-1,2,2,2], informTime = [0,0,1,0,0,0]
Output: 1
Explanation: The head of the company with id = 2 is the direct manager of all the employees in the company and needs 1 minute to inform them all.
The tree structure of the employees in the company is shown.
πŸ‘¨β€πŸ’» Алгоритм: 1⃣БоздайтС список смСТности adjList; индСкс i Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ смСТныС ΡƒΠ·Π»Ρ‹ для сотрудника с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ i. 2βƒ£Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎ сотрудникам ΠΎΡ‚ 0 Π΄ΠΎ N - 1, ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сотрудника i добавляйтС Ρ€Π΅Π±Ρ€ΠΎ manager[i] -> i, Ссли manager[i] Π½Π΅ Ρ€Π°Π²Π΅Π½ -1. 3⃣НачнитС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ DFS с ΡƒΠ·Π»Π° headID ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ 0 для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΊΠ°ΠΊ curr. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ максимальноС врСмя maxTime, сравнив Π΅Π³ΠΎ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎ смСТным ΡƒΠ·Π»Π°ΠΌ curr ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ смСТного ΡƒΠ·Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ DFS с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ time + informTime[curr]. Когда DFS Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ maxTime. 😎 РСшСниС:
public class Solution {
    private int maxTime = int.MinValue;
    
    private void DFS(List<int>[] adjList, int[] informTime, int curr, int time) {
        maxTime = Math.Max(maxTime, time);
        foreach (int adjacent in adjList[curr]) {
            DFS(adjList, informTime, adjacent, time + informTime[curr]);
        }
    }
    
    public int NumOfMinutes(int n, int headID, int[] manager, int[] informTime) {
        List<int>[] adjList = new List<int>[n];
        for (int i = 0; i < n; i++) {
            adjList[i] = new List<int>();
        }
        for (int i = 0; i < n; i++) {
            if (manager[i] != -1) {
                adjList[manager[i]].Add(i);
            }
        }
        DFS(adjList, informTime, headID, 0);
        return maxTime;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 162. Find Peak Element Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium ΠŸΠΈΠΊΠΎΠ²Ρ‹ΠΌ элСмСнтом называСтся элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ строго большС своих сосСдСй. Для массива Ρ†Π΅Π»Ρ‹Ρ… чисСл nums с индСксациСй с нуля Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΈΠΊΠΎΠ²Ρ‹ΠΉ элСмСнт ΠΈ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ индСкс. Если Π² массивС нСсколько ΠΏΠΈΠΊΠΎΠ², Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ индСкс любого ΠΈΠ· ΠΏΠΈΠΊΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ nums[-1] = nums[n] = -∞. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, элСмСнт всСгда считаСтся строго большим, Ρ‡Π΅ΠΌ сосСд, находящийся Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ массива. НСобходимо Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π° врСмя O(log n). ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ срСдний элСмСнт массива mid ΠΊΠ°ΠΊ mid = low + (high - low) / 2. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… значСниях индСксов. 2βƒ£ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ направлСния поиска: Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅ΠΌ элСмСнт nums[mid] с Π΅Π³ΠΎ ΠΏΡ€Π°Π²Ρ‹ΠΌ сосСдом nums[mid + 1]. Если nums[mid] мСньшС nums[mid + 1], это ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ восходящСй ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ ΠΌΡ‹ двигаСмся Π²ΠΏΡ€Π°Π²ΠΎ, устанавливая low = mid + 1. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΠΊ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ находится Π² ΠΏΡ€Π°Π²ΠΎΠΉ части. Если nums[mid] большС nums[mid + 1], это ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ нисходящСй ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ ΠΏΠΈΠΊ находится Π»ΠΈΠ±ΠΎ Π² mid, Π»ΠΈΠ±ΠΎ слСва ΠΎΡ‚ Π½Π΅Π³ΠΎ, Ρ‚ΠΎΠ³Π΄Π° устанавливаСм high = mid. 3βƒ£Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ поиска: ΠŸΡ€ΠΎΡ†Π΅ΡΡ продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° low Π½Π΅ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ high, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ суТСниС поисковой области Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ являСтся ΠΏΠΈΠΊΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности. 😎 РСшСниС:
public class Solution {
    public int FindPeakElement(int[] nums) {
        return Search(nums, 0, nums.Length - 1);
    }

    public int Search(int[] nums, int l, int r) {
        if (l == r)
            return l;
        int mid = (l + r) / 2;
        if (nums[mid] > nums[mid + 1])
            return Search(nums, l, mid);
        return Search(nums, mid + 1, r);
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 1426. Counting Elements Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: easy Π”Π°Π½ цСлочислСнный массив arr, посчитайтС, сколько элСмСнтов x Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ…, Ρ‡Ρ‚ΠΎ x + 1 Ρ‚Π°ΠΊΠΆΠ΅ находится Π² arr. Если Π² arr Π΅ΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹, считайтС ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: arr = [1,2,3]
Output: 2
Explanation: 1 and 2 are counted cause 2 and 3 are in arr.
πŸ‘¨β€πŸ’» Алгоритм: 1⃣БоздайтС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, содСрТится Π»ΠΈ элСмСнт Π² массивС. 2βƒ£Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, содСрТится Π»ΠΈ элСмСнт x + 1 Π² массивС. 3βƒ£Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ счСтчик, Ссли x + 1 Π½Π°ΠΉΠ΄Π΅Π½, ΠΈ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика. 😎 РСшСниС:
public class Solution {
    public int CountElements(int[] arr) {
        int count = 0;
        foreach (int x in arr) {
            if (IntegerInArray(arr, x + 1)) {
                count++;
            }
        }
        return count;
    }
    
    public bool IntegerInArray(int[] arr, int target) {
        foreach (int x in arr) {
            if (x == target) {
                return true;
            }
        }
        return false;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 1016. Binary String With Substrings Representing 1 To N Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Если Π·Π°Π΄Π°Π½Π° двоичная строка s ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число n, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ true, Ссли Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС всСх Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [1, n] являСтся подстрокой s, ΠΈΠ»ΠΈ false Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° - это нСпрСрывная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов Π² строкС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: s = "0110", n = 3
Output: true
πŸ‘¨β€πŸ’» Алгоритм: 1⃣ГСнСрация Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… строк: Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ числа Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [1, n] сгСнСрируйтС Π΅Π³ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС. 2βƒ£ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° подстрок: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, являСтся Π»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… прСдставлСний подстрокой строки s. 3⃣Возврат Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°: Если всС Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ прСдставлСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ подстроками строки s, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ true. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ false. 😎 РСшСниС:
public class Solution {
    public bool QueryString(string s, int n) {
        for (int i = 1; i <= n; i++) {
            string binary = Convert.ToString(i, 2);
            if (!s.Contains(binary)) {
                return false;
            }
        }
        return true;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

πŸ“Ί Π‘Π°Π·Π° 1000+ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… собСсСдований На программиста, тСстировщика, Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°, ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ IT ΠΏΡ€ΠΎΡ„Ρ‹. Π•ΡΡ‚ΡŒ собСсы ΠΎΡ‚ Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ: Π‘Π±Π΅Ρ€, ЯндСкс, Π’Π’Π‘, Π’ΠΈΠ½ΡŒΠΊΠΎΡ„Ρ„, Озон, Wildberries ΠΈ Ρ‚.Π΄. 🎯 ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈ ΠΏΠΎ ссылкС ΠΈ присоСдиняйся ΠΊ Π±Π°Π·Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒ свои ΡˆΠ°Π½ΡΡ‹ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ трудоустройство!

#medium Π—Π°Π΄Π°Ρ‡Π°: 311. Sparse Matrix Multiplication Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π”Π°Π½Ρ‹ Π΄Π²Π΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ mat1 Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ m x k ΠΈ mat2 Ρ€
#medium Π—Π°Π΄Π°Ρ‡Π°: 311. Sparse Matrix Multiplication Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π”Π°Π½Ρ‹ Π΄Π²Π΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ mat1 Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ m x k ΠΈ mat2 Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ k x n. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ пСрСмноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† mat1 x mat2. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ всСгда Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: mat1 = [[1,0,0],[-1,0,3]], mat2 = [[7,0,0],[0,0,0],[0,0,1]]
Output: [[7,0,0],[-7,0,3]]
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ result Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ m x n, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ нулями. 2⃣Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ mat1 ΠΈ сохранитС индСксы ΠΈ значСния Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов Π² Ρ…Π΅Ρˆ-ΠΊΠ°Ρ€Ρ‚Π΅ mat1_map. ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ mat2 ΠΈ сохранитС индСксы ΠΈ значСния Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов Π² Ρ…Π΅Ρˆ-ΠΊΠ°Ρ€Ρ‚Π΅ mat2_map. 3⃣ВычислСниС произвСдСния Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки i Π² mat1 ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ j Π² mat2: Если Π² mat1_map Π΅ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт Π² строкС i ΠΈ Π² mat2_map Π΅ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ j с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ индСксом k, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ этих элСмСнтов ΠΊ result[i][j]. 😎 РСшСниС:
public class Solution {
    public int[][] Multiply(int[][] mat1, int[][] mat2) {
        int n = mat1.Length;
        int k = mat1[0].Length;
        int m = mat2[0].Length;

        int[][] ans = new int[n][];
        for (int i = 0; i < n; i++) {
            ans[i] = new int[m];
        }

        for (int rowIndex = 0; rowIndex < n; rowIndex++) {
            for (int elementIndex = 0; elementIndex < k; elementIndex++) {
                if (mat1[rowIndex][elementIndex] != 0) {
                    for (int colIndex = 0; colIndex < m; colIndex++) {
                        ans[rowIndex][colIndex] += mat1[rowIndex][elementIndex] * mat2[elementIndex][colIndex];
                    }
                }
            }
        }

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

Π—Π°Π΄Π°Ρ‡Π°: 616. Add Bold Tag in String Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π’Π°ΠΌ Π΄Π°Π½Π° строка s ΠΈ массив строк words. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹Ρ… Ρ‚Π΅Π³ΠΎΠ² <b> ΠΈ </b>, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ подстроки Π² s, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² words. Если Π΄Π²Π΅ Ρ‚Π°ΠΊΠΈΠ΅ подстроки ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡ… вмСстС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠΉ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹Ρ… Ρ‚Π΅Π³ΠΎΠ². Если Π΄Π²Π΅ подстроки, ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌΠΈ Ρ‚Π΅Π³Π°ΠΌΠΈ, ΠΈΠ΄ΡƒΡ‚ подряд, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ…. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ s послС добавлСния ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹Ρ… Ρ‚Π΅Π³ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: s = "abcxyz123", words = ["abc","123"]
Output: "<b>abc</b>xyz<b>123</b>"
πŸ‘¨β€πŸ’» Алгоритм: 1⃣НайдитС всС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ подстрок ΠΈΠ· words Π² строку s ΠΈ ΠΏΠΎΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ эти ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ для выдСлСния Ρ‚Π΅Π³Π°ΠΌΠΈ <b> ΠΈ </b>. 2βƒ£ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ΡΡŒ ΠΏΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌ позициям, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ области, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ, слияя ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈ смСТныС области. 3βƒ£ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ строку s, добавляя Ρ‚Π΅Π³ΠΈ <b> ΠΈ </b> Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. 😎 РСшСниС:
public class Solution {
    public string AddBoldTag(string s, string[] words) {
        int n = s.Length;
        bool[] bold = new bool[n];
        
        foreach (var word in words) {
            int start = s.IndexOf(word);
            while (start != -1) {
                for (int i = start; i < start + word.Length; i++) {
                    bold[i] = true;
                }
                start = s.IndexOf(word, start + 1);
            }
        }
        
        var result = new StringBuilder();
        int j = 0;
        while (j < n) {
            if (bold[j]) {
                result.Append("<b>");
                while (j < n && bold[j]) {
                    result.Append(s[j]);
                    j++;
                }
                result.Append("</b>");
            } else {
                result.Append(s[j]);
                j++;
            }
        }
        
        return result.ToString();
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 974. Subarray Sums Divisible by K Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π”Π°Π½ цСлочислСнный массив nums ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число k. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ количСство нСпустых подмассивов, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСлится Π½Π° k. Подмассив β€” это нСпрСрывная Ρ‡Π°ΡΡ‚ΡŒ массива. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: nums = [4,5,0,-2,-3,1], k = 5
Output: 7
Explanation: There are 7 subarrays with a sum divisible by k = 5:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ prefixMod = 0 для хранСния остатка ΠΎΡ‚ суммы элСмСнтов Π΄ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ индСкса ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° k. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ result = 0 для хранСния количСства подмассивов, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСлится Π½Π° k. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ массив modGroups Π΄Π»ΠΈΠ½ΠΎΠΉ k, Π³Π΄Π΅ modGroups[R] Ρ…Ρ€Π°Π½ΠΈΡ‚ количСство подмассивов с остатком R. УстановитС modGroups[0] = 1. 2βƒ£Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ массиву. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива nums вычислитС Π½ΠΎΠ²Ρ‹ΠΉ prefixMod ΠΊΠ°ΠΊ (prefixMod + nums[i] % k + k) % k, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ result Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ modGroups[prefixMod], Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ количСство подмассивов с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ остатком. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ modGroups[prefixMod] Π½Π° 1 для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… совпадСний. 3⃣Возврат Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ result, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит количСство подмассивов, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСлится Π½Π° k. 😎 РСшСниС:
public class Solution {
    public int SubarraysDivByK(int[] nums, int k) {
        int prefixMod = 0, result = 0;
        int[] modGroups = new int[k];
        modGroups[0] = 1;

        foreach (int num in nums) {
            prefixMod = (prefixMod + num % k + k) % k;
            result += modGroups[prefixMod];
            modGroups[prefixMod]++;
        }

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

Π—Π°Π΄Π°Ρ‡Π°: 141. Linked List Cycle Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: easy Π”Π°Π½Π° пСрСмСнная head, которая являСтся Π½Π°Ρ‡Π°Π»ΠΎΠΌ связного списка. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, со
Π—Π°Π΄Π°Ρ‡Π°: 141. Linked List Cycle Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: easy Π”Π°Π½Π° пСрСмСнная head, которая являСтся Π½Π°Ρ‡Π°Π»ΠΎΠΌ связного списка. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, содСрТит Π»ΠΈ связный список Ρ†ΠΈΠΊΠ». Π¦ΠΈΠΊΠ» Π² связном спискС сущСствуСт, Ссли сущСствуСт ΡƒΠ·Π΅Π» Π² спискС, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ снова, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ слСдуя ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ next. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ пСрСмСнная pos ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обозначСния индСкса ΡƒΠ·Π»Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ next послСднСго ΡƒΠ·Π»Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ pos Π½Π΅ пСрСдаСтся Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ true, Ссли Π² связном спискС Π΅ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ». Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ false. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 1st node (0-indexed).
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ структуры Π΄Π°Π½Π½Ρ‹Ρ…: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (ΠΈΠ»ΠΈ мноТСство) для хранСния ссылок Π½Π° ΡƒΠ·Π»Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ посСщённыС ΡƒΠ·Π»Ρ‹. 2βƒ£ΠžΠ±Ρ…ΠΎΠ΄ списка: ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎ связному списку, начиная с Π³ΠΎΠ»ΠΎΠ²Ρ‹ (head), ΠΈ провСряйтС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. 3βƒ£ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ†ΠΈΠΊΠ»: Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» Ρ€Π°Π²Π΅Π½ null, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ достигли ΠΊΠΎΠ½Ρ†Π° списка, ΠΈ список Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†ΠΈΠΊΠ»ΠΎΠ². Π’ этом случаС Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ false. Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» ΡƒΠΆΠ΅ содСрТится Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ ΠΊ Ρ€Π°Π½Π΅Π΅ посСщённому ΡƒΠ·Π»Ρƒ, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² спискС присутствуСт Ρ†ΠΈΠΊΠ». Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ true. Если Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· этих условий Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅ ΠΎΠ±Ρ…ΠΎΠ΄ списка. 😎 РСшСниС:
public class Solution {
    public bool HasCycle(ListNode head) {
        HashSet<ListNode> nodesSeen = new HashSet<ListNode>();
        ListNode current = head;
        while (current != null) {
            if (nodesSeen.Contains(current)) {
                return true;
            }

            nodesSeen.Add(current);
            current = current.next;
        }

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

Π—Π°Π΄Π°Ρ‡Π°: 1074. Number of Submatrices That Sum to Target Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: hard Π”Π°Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ количСство нСпустых ΠΏΠΎΠ΄ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, сумма элСмСнтов ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. ΠŸΠΎΠ΄ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° x1, y1, x2, y2 β€” это Π½Π°Π±ΠΎΡ€ всСх ячССк matrix[x][y] с x1 <= x <= x2 ΠΈ y1 <= y <= y2. Π”Π²Π΅ ΠΏΠΎΠ΄ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (x1, y1, x2, y2) ΠΈ (x1', y1', x2', y2') Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹, Ссли Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ какая-Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰Π°ΡΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли x1 != x1'. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: matrix = [[0,1,0],[1,1,1],[0,1,0]], target = 0
Output: 4
Explanation: The four 1x1 submatrices that only contain 0.
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: count = 0. ВычислитС количСство строк: r = len(matrix) ΠΈ количСство столбцов: c = len(matrix[0]). ВычислитС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ ΠΏΡ€Π΅Ρ„ΠΈΠΊΡΠ½ΡƒΡŽ сумму ps, Π²Ρ‹Π΄Π΅Π»ΠΈΠ² Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ строку ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ столбСц для Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. 2βƒ£Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎ строкам: r1 ΠΎΡ‚ 1 Π΄ΠΎ r ΠΈ r2 ΠΎΡ‚ r1 Π΄ΠΎ r. Π’Π½ΡƒΡ‚Ρ€ΠΈ этого Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° фиксируйтС Π»Π΅Π²Ρ‹Π΅ ΠΈ ΠΏΡ€Π°Π²Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ строк ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для хранСния прСфиксных сумм. Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎ столбцам ΠΎΡ‚ 1 Π΄ΠΎ c + 1, вычислитС Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΡ€Π΅Ρ„ΠΈΠΊΡΠ½ΡƒΡŽ сумму 1D curr_sum ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ count Π½Π° количСство ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½Π° target. 3βƒ£Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΡ€Π΅Ρ„ΠΈΠΊΡΠ½ΡƒΡŽ сумму 1D Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Когда всС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ count. 😎 РСшСниС:
public class Solution {
    public int NumSubmatrixSumTarget(int[][] matrix, int target) {
        int r = matrix.Length, c = matrix[0].Length;
        int[,] ps = new int[r + 1, c + 1];
        
        for (int i = 1; i <= r; ++i) {
            for (int j = 1; j <= c; ++j) {
                ps[i, j] = ps[i - 1, j] + ps[i, j - 1] - ps[i - 1, j - 1] + matrix[i - 1][j - 1];
            }
        }
        
        int count = 0;
        
        for (int r1 = 1; r1 <= r; ++r1) {
            for (int r2 = r1; r2 <= r; ++r2) {
                Dictionary<int, int> h = new Dictionary<int, int>();
                h[0] = 1;
                for (int col = 1; col <= c; ++col) {
                    int currSum = ps[r2, col] - ps[r1 - 1, col];
                    if (h.ContainsKey(currSum - target)) {
                        count += h[currSum - target];
                    }
                    if (h.ContainsKey(currSum)) {
                        h[currSum]++;
                    } else {
                        h[currSum] = 1;
                    }
                }
            }
        }
        
        return count;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 1416. Restore The Array Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: hard ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ массив Ρ†Π΅Π»Ρ‹Ρ… чисСл. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π±Ρ‹Π»Π° Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, ΠΈ массив Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ ΠΊΠ°ΠΊ строка Ρ†ΠΈΡ„Ρ€ s, ΠΈ всё, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, это Ρ‡Ρ‚ΠΎ всС числа Π² массивС Π±Ρ‹Π»ΠΈ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [1, k] ΠΈ Π² массивС Π½Π΅Ρ‚ Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… Π½ΡƒΠ»Π΅ΠΉ. Учитывая строку s ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число k, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… массивов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Ρ‹ ΠΊΠ°ΠΊ s с использованиСм упомянутой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большим, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 10^9 + 7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: s = "1000", k = 10000
Output: 1
Explanation: The only possible array is [1000]
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ массив dp Ρ€Π°Π·ΠΌΠ΅Ρ€Π° m + 1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния dfs(x). 2⃣Для получСния значСния dfs(start), Ссли dp[start] Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π˜Π½Π°Ρ‡Π΅: Если s[start] == 0, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ 0. Если start = m, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ 1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ count = 0, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… массивов. ΠŸΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ индСксы end, ΠΈ Ссли s[start ~ end] прСдставляСт допустимоС число, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ рСкурсивный Π²Ρ‹Π·ΠΎΠ² dfs(end + 1) ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ count ΠΊΠ°ΠΊ count += dfs(end + 1). ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ dp[start] Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ dfs(start). 3βƒ£Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ dfs(0). 😎 РСшСниС:
public class Solution {
    private int mod = 1_000_000_007;

    private int Dfs(int[] dp, int start, string s, int k) {
        if (dp[start] != 0) return dp[start];
        if (start == s.Length) return 1;
        if (s[start] == '0') return 0;

        long count = 0;
        for (int end = start; end < s.Length; ++end) {
            string currNumber = s.Substring(start, end - start + 1);
            if (long.Parse(currNumber) > k) break;
            count = (count + Dfs(dp, end + 1, s, k)) % mod;
        }

        dp[start] = (int)count;
        return (int)count;
    }

    public int NumberOfArrays(string s, int k) {
        int[] dp = new int[s.Length + 1];
        return Dfs(dp, 0, s, k);
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 167. Two Sum II - Input Array Is Sorted Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π”Π°Π½ массив Ρ†Π΅Π»Ρ‹Ρ… чисСл numbers, индСксированный с 1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ отсортирован Π² Π½Π΅ΡƒΠ±Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ порядкС. НайдитС Π΄Π²Π° числа Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… сумма составляла Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ число. ΠŸΡƒΡΡ‚ΡŒ эти Π΄Π²Π° числа Π±ΡƒΠ΄ΡƒΡ‚ numbers[index1] ΠΈ numbers[index2], Π³Π΄Π΅ 1 <= index1 < index2 <= numbers.length. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ индСксы этих Π΄Π²ΡƒΡ… чисСл, index1 ΠΈ index2, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½, Π² Π²ΠΈΠ΄Π΅ массива ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов [index1, index2]. ВСсты Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сущСствуСт Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. НСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ элСмСнт Π΄Π²Π°ΠΆΠ΄Ρ‹. Π’Π°ΡˆΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ константноС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2].
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π²Π° указатСля: ΠΎΠ΄ΠΈΠ½ (left) начинаСтся с Π½Π°Ρ‡Π°Π»Π° массива, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ (right) - с ΠΊΠΎΠ½Ρ†Π°. 2βƒ£ΠŸΠΎΠΈΡΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ сумму элСмСнтов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ left ΠΈ right, с Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ target. Если сумма Ρ€Π°Π²Π½Π° target, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ индСксы этих элСмСнтов ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Если сумма мСньшС target, ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ left (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ массив отсортирован ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ left ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ сумму). Если сумма большС target, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ right (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ сумму). 3βƒ£ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ нахоТдСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΠΉΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ left ΠΈ right, повторяя сравнСниС, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Учитывая, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ сущСствованиС Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ всСгда Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚. 😎 РСшСниС:
public class Solution {
    public int[] TwoSum(int[] numbers, int target) {
        int low = 0;
        int high = numbers.Length - 1;
        while (low < high) {
            int sum = numbers[low] + numbers[high];
            if (sum == target) {
                return new int[] { low + 1, high + 1 };
            } else if (sum < target) {
                ++low;
            } else {
                --high;
            }
        }
        return new int[] { -1, -1 };
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 856. Score of Parentheses Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π”Π°Π½Π° строка s, состоящая ΠΈΠ· сбалансированных скобок, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ счёт строки. Π‘Ρ‡Ρ‘Ρ‚ сбалансированной строки скобок основываСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ…: "()" ΠΈΠΌΠ΅Π΅Ρ‚ счёт 1. AB ΠΈΠΌΠ΅Π΅Ρ‚ счёт A + B, Π³Π΄Π΅ A ΠΈ B β€” сбалансированныС строки скобок. (A) ΠΈΠΌΠ΅Π΅Ρ‚ счёт 2 * A, Π³Π΄Π΅ A β€” сбалансированная строка скобок. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: s = "()"
Output: 1
πŸ‘¨β€πŸ’» Алгоритм: 1⃣Назовём ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ, Ссли Π΅Ρ‘ нСльзя Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ нСпустыС сбалансированныС строки. 2βƒ£ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ баланс (количСство ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… скобок минус количСство Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… скобок), ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ строку S Π½Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ подстроки S = P_1 + P_2 + ... + P_n. Π’ΠΎΠ³Π΄Π°, ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, score(S) = score(P_1) + score(P_2) + ... + score(P_n). 3⃣Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ подстроки (S[i], S[i+1], ..., S[k]), Ссли Π΄Π»ΠΈΠ½Π° строки Ρ€Π°Π²Π½Π° 2, Ρ‚ΠΎ Π΅Ρ‘ счёт Ρ€Π°Π²Π΅Π½ 1. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, счёт Ρ€Π°Π²Π΅Π½ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ счёту подстроки (S[i+1], S[i+2], ..., S[k-1]). 😎 РСшСниС:
public class Solution {
    public int ScoreOfParentheses(string S) {
        return F(S, 0, S.Length);
    }

    private int F(string S, int i, int j) {
        int ans = 0, bal = 0;

        for (int k = i; k < j; ++k) {
            bal += S[k] == '(' ? 1 : -1;
            if (bal == 0) {
                if (k - i == 1) ans++;
                else ans += 2 * F(S, i + 1, k);
                i = k + 1;
            }
        }

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

Π—Π°Π΄Π°Ρ‡Π°: 136. Single Number Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: easy Π”Π°Π½ нСпустой массив Ρ†Π΅Π»Ρ‹Ρ… чисСл nums, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт встрСчаСтся Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. НайдитС этот СдинствСнный элСмСнт. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ выполнСния ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ постоянноС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: nums = [2,2,1]
Output: 1
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠŸΠ΅Ρ€Π΅Π±Π΅Ρ€ΠΈΡ‚Π΅ всС элСмСнты Π² массивС nums. 2⃣Если ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ число Π² nums Π½ΠΎΠ²ΠΎΠ΅ для массива, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ. 3⃣Если ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ число ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² массивС, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π΅Π³ΠΎ. 😎 РСшСниС:
public class Solution {
    public int SingleNumber(int[] nums) {
        List<int> no_duplicate_list = new List<int>();
        foreach (int i in nums) {
            if (!no_duplicate_list.Contains(i)) {
                no_duplicate_list.Add(i);
            } else {
                no_duplicate_list.Remove(i);
            }
        }

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

Π—Π°Π΄Π°Ρ‡Π°: 1272. Remove Interval Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ вСщСствСнных чисСл ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ объСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ², Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ [a, b). ВСщСствСнноС число x Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² мноТСство, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² [a, b) содСрТит x (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ a <= x < b). Π’Π°ΠΌ Π΄Π°Π½ отсортированный список Π½Π΅ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… мноТСство вСщСствСнных чисСл, ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅, Π³Π΄Π΅ intervals[i] = [ai, bi] прСдставляСт ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» [ai, bi). Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π½ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» toBeRemoved. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ Π½Π°Π±ΠΎΡ€ вСщСствСнных чисСл с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ toBeRemoved, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ· intervals. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ Π½Π°Π±ΠΎΡ€ вСщСствСнных чисСл, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ x Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅, Π½ΠΎ Π½Π΅ Π² toBeRemoved. Π’Π°ΡˆΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ отсортированный список Π½Π΅ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ², ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: intervals = [[0,2],[3,4],[5,7]], toBeRemoved = [1,6]
Output: [[0,1],[6,7]]
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρƒ Π² спискС intervals. 2⃣Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°, провСряйтС пСрСсСчСния с toBeRemoved ΠΈ обновляйтС список Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². 3⃣ДобавляйтС Π½Π΅ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ части Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. 😎 РСшСниС:
using System;
using System.Collections.Generic;

public class Solution {
    public IList<IList<double>> RemoveInterval(IList<IList<double>> intervals, IList<double> toBeRemoved) {
        var result = new List<IList<double>>();
        foreach (var interval in intervals) {
            if (interval[0] < toBeRemoved[0]) {
                result.Add(new List<double> { interval[0], Math.Min(interval[1], toBeRemoved[0]) });
            }
            if (interval[1] > toBeRemoved[1]) {
                result.Add(new List<double> { Math.Max(interval[0], toBeRemoved[1]), interval[1] });
            }
        }
        return result;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 413. Arithmetic Slices Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium ЦСлочислСнный массив называСтся арифмСтичСским, Ссли ΠΎΠ½ состоит Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ
Π—Π°Π΄Π°Ρ‡Π°: 413. Arithmetic Slices Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium ЦСлочислСнный массив называСтся арифмСтичСским, Ссли ΠΎΠ½ состоит Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов ΠΈ Ссли Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ двумя ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°. НапримСр, [1,3,5,7,9], [7,7,7] ΠΈ [3,-1,-5,-9] ΡΠ²Π»ΡΡŽΡ‚ΡΡ арифмСтичСскими ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ. Если Π·Π°Π΄Π°Π½ цСлочислСнный массив nums, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ количСство арифмСтичСских подмассивов массива nums. Подмассив - это нСпрСрывная ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ массива. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: nums = [1,2,3,4]
Output: 3
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ массиву, инициализируя Π΄Π²Π° указатСля: Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ. НачнитС с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ элСмСнтов. 2⃣Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ элСмСнтов провСряйтС, сохраняСтся Π»ΠΈ Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами. Если Π΄Π°, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ Π΄Π»ΠΈΠ½Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ арифмСтичСской ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Если Π½Π΅Ρ‚, сбрасывайтС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. 3⃣БуммируйтС количСство Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… арифмСтичСских подмассивов, учитывая, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ арифмСтичСского подмассива Π΄Π»ΠΈΠ½Ρ‹ len, количСство Ρ‚Π°ΠΊΠΈΡ… подмассивов Ρ€Π°Π²Π½ΠΎ (len - 2). 😎 РСшСниС:
public class Solution {
    public int NumberOfArithmeticSlices(int[] nums) {
        if (nums.Length < 3) return 0;
        int count = 0;
        int currentLength = 0;
        for (int i = 2; i < nums.Length; i++) {
            if (nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]) {
                currentLength++;
                count += currentLength;
            } else {
                currentLength = 0;
            }
        }
        return count;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 922. Sort Array By Parity II Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: medium Π”Π°Π½ массив Ρ†Π΅Π»Ρ‹Ρ… чисСл nums, ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² Π½Π΅ΠΌ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅, Π° другая ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° - Ρ‡Π΅Ρ‚Π½Ρ‹Π΅. ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ массив Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎ всСх случаях, ΠΊΠΎΠ³Π΄Π° nums[i] Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ, i Π±Ρ‹Π» Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ, Π° Π²ΠΎ всСх случаях, ΠΊΠΎΠ³Π΄Π° nums[i] Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ, i Π±Ρ‹Π» Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ любой массив ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉ этому ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: nums = [4,2,5,7]
Output: [4,5,2,7]
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° указатСля even_idx ΠΈ odd_idx для отслСТивания ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… индСксов соотвСтствСнно. 2βƒ£ΠŸΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ массиву nums ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта: Если элСмСнт Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ, ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ even_idx ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ even_idx Π½Π° 2. Если элСмСнт Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ, ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ odd_idx ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ odd_idx Π½Π° 2. 3βƒ£Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ отсортированный массив. 😎 РСшСниС:
public class Solution {
    public int[] SortArrayByParityII(int[] nums) {
        int[] result = new int[nums.Length];
        int evenIdx = 0;
        int oddIdx = 1;
        
        foreach (int num in nums) {
            if (num % 2 == 0) {
                result[evenIdx] = num;
                evenIdx += 2;
            } else {
                result[oddIdx] = num;
                oddIdx += 2;
            }
        }
        
        return result;
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

Π—Π°Π΄Π°Ρ‡Π°: 28. Find the Index of the First Occurrence in a String Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: easy Учитывая Π΄Π²Π΅ строки needle ΠΈ haystack, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния needle Π² haystack ΠΈΠ»ΠΈ -1, Ссли needle Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ haystack. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: haystack = "sadbutsad", needle = "sad"  
Output: 0  
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° указатСля i ΠΈ j для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ haystack ΠΈ needle. 2βƒ£ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ KMP с использованиСм массива LPS (longest prefix suffix) для ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска. 3βƒ£Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния needle ΠΈΠ»ΠΈ -1, Ссли needle Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. 😎 РСшСниС:
public class Solution {
    public int StrStr(string haystack, string needle) {
        int i = 0, j = 0;
        int[] lps = BuildLPS(needle);
        
        while (i < haystack.Length) {
            if (haystack[i] == needle[j]) {
                i++;
                j++;
                if (j == needle.Length) return i - j;
            } else {
                if (j > 0) j = lps[j - 1];
                else i++;
            }
        }
        
        return -1;
    }
    
    private int[] BuildLPS(string needle) {
        int[] lps = new int[needle.Length];
        int i = 0;

        for (int j = 1; j < needle.Length;) {
            if (needle[i] == needle[j]) {
                lps[j++] = ++i;
            } else {
                if (i > 0) i = lps[i - 1];
                else j++;
            }
        }

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

⚑️ Π’ сСти Π½Π°Ρ‡Π°Π»ΠΈ массово ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒ курсы ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ извСстных ΠΎΠ½Π»Π°ΠΉΠ½ школ ΠΏΠΎ Π°ΠΉΡ‚ΠΈ Π’ΠΎΡ‚ отсортированная Π±Π°Π·Π° с Ρ‚ΠΎΠ½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° (пос
⚑️ Π’ сСти Π½Π°Ρ‡Π°Π»ΠΈ массово ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒ курсы ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ извСстных ΠΎΠ½Π»Π°ΠΉΠ½ школ ΠΏΠΎ Π°ΠΉΡ‚ΠΈ Π’ΠΎΡ‚ отсортированная Π±Π°Π·Π° с Ρ‚ΠΎΠ½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° (постСпСнно пополняСтся): (363 Π²ΠΈΠ΄Π΅ΠΎ, 87 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Python (415 Π²ΠΈΠ΄Π΅ΠΎ, 68 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Frontend (143 Π²ΠΈΠ΄Π΅ΠΎ, 33 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Π˜Π‘/Π₯Π°ΠΊΠΈΠ½Π³ (352 Π²ΠΈΠ΄Π΅ΠΎ, 89 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Π‘/Π‘++/C# (343 Π²ΠΈΠ΄Π΅ΠΎ, 87 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Java/QA (176 Π²ΠΈΠ΄Π΅ΠΎ, 32 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Git/Linux (174 Π²ΠΈΠ΄Π΅ΠΎ, 91 ΠΊΠ½ΠΈΠ³ΠΈ) β€” DevOps (167 Π²ΠΈΠ΄Π΅ΠΎ, 53 ΠΊΠ½ΠΈΠ³ΠΈ) β€” PHP/1Π‘ (227 Π²ΠΈΠ΄Π΅ΠΎ, 83 ΠΊΠ½ΠΈΠ³ΠΈ) β€” SQL/Π‘Π” (114 Π²ΠΈΠ΄Π΅ΠΎ, 77 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Бисадмин (107 Π²ΠΈΠ΄Π΅ΠΎ, 43 ΠΊΠ½ΠΈΠ³ΠΈ) β€” BA/SA (181 Π²ΠΈΠ΄Π΅ΠΎ, 32 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Go/Rust (167 Π²ΠΈΠ΄Π΅ΠΎ, 43 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Kotlin/Swift (112 Π²ΠΈΠ΄Π΅ΠΎ, 24 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Flutter (137 Π²ΠΈΠ΄Π΅ΠΎ, 93 ΠΊΠ½ΠΈΠ³ΠΈ) β€” DS/ML (113 Π²ΠΈΠ΄Π΅ΠΎ, 82 ΠΊΠ½ΠΈΠ³ΠΈ) β€” GameDev (183 Π²ΠΈΠ΄Π΅ΠΎ, 37 ΠΊΠ½ΠΈΠ³ΠΈ) β€” Π”ΠΈΠ·Π°ΠΉΠ½ (136 Π²ΠΈΠ΄Π΅ΠΎ, 33 ΠΊΠ½ΠΈΠ³ΠΈ) β€” PM/HR Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ β€” всС Π²Ρ‹Π»ΠΎΠΆΠΈΠ»ΠΈ Π² Telegram

Π—Π°Π΄Π°Ρ‡Π°: 405. Convert a Number to Hexadecimal Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: easy Если Π·Π°Π΄Π°Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅ число num, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ строку, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ Π΅Π³ΠΎ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС. Для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ дополнСния Π΄ΠΎ Π΄Π²ΡƒΡ…. ВсС Π±ΡƒΠΊΠ²Ρ‹ Π² строкС ΠΎΡ‚Π²Π΅Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ строчными, ΠΈ Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… Π½ΡƒΠ»Π΅ΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ самого нуля. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’Π°ΠΌ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ встроСнныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для нСпосрСдствСнного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Input: num = 26
Output: "1a"
πŸ‘¨β€πŸ’» Алгоритм: 1βƒ£ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, являСтся Π»ΠΈ число ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Если Π΄Π°, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° дополнСния Π΄ΠΎ Π΄Π²ΡƒΡ…. Для этого ΠΏΡ€ΠΈΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ числу 2^32 ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ И с маской 0xFFFFFFFF. 2⃣БоздайтС строку с ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ символами. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅ число Π½Π° 16 ΠΈ добавляйтС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ символ ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ, ΠΏΠΎΠΊΠ° число Π½Π΅ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ. 3βƒ£ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ строку Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ Π½ΡƒΠ»ΠΈ, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ. Если строка пустая, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ "0". 😎 РСшСниС:
public class Solution {
    public string ToHex(int num) {
        if (num == 0) return "0";
        char[] hexChars = "0123456789abcdef".ToCharArray();
        uint n = (uint)num;
        StringBuilder result = new StringBuilder();
        while (n > 0) {
            result.Append(hexChars[n % 16]);
            n /= 16;
        }
        char[] charArray = result.ToString().ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }
}
Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

C# | LeetCode - Telegram kanali @easy_c_sharp_task statistikasi va tahlili