fa
Feedback
C# | LeetCode

C# | LeetCode

رفتن به کانال در Telegram
3 289
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-77 روز
-1630 روز
آرشیو پست ها
Курс Аналитика в Business Intelligence в НИУ ВШЭ Удостоверение о повышении квалификации. Подходит начинающим. Онлайн Курс пос
Курс Аналитика в Business Intelligence в НИУ ВШЭ Удостоверение о повышении квалификации. Подходит начинающим. Онлайн Курс посвящен работе с BI-системами на примере Tableau, DataLens. Вы узнаете, как с помощью Business Intelligence визуализировать и готовить данные для дальнейшей работы, а также как настроить дашборд так, чтобы он удовлетворил заказчика. Узнать больше #реклама 16+ hse.ru О рекламодателе

Задача: 1053. Previous Permutation With One Swap Сложность: medium Учитывая массив целых положительных чисел arr (не обязательно различных), верните лексикографически наибольшую перестановку, которая меньше arr и может быть сделана ровно с одной подстановкой. Если это невозможно, то верните тот же массив. Обратите внимание, что перестановка меняет местами два числа arr[i] и arr[j]. Пример:
Input: arr = [3,2,1]
Output: [3,1,2]
👨‍💻 Алгоритм: 1⃣Определи общее количество покупателей, которые удовлетворены в минуты, когда владелец магазина не ворчлив. 2⃣Пройди по массиву, используя скользящее окно для учета эффекта от техники. 3⃣Найди максимальное количество дополнительных удовлетворенных покупателей, которые можно получить, используя технику на k минут подряд. 😎 Решение:
public class Solution {
    public int[] PrevPermOpt1(int[] arr) {
        int n = arr.Length;
        int i;
        for (i = n - 2; i >= 0; i--) {
            if (arr[i] > arr[i + 1]) {
                break;
            }
        }
        if (i == -1) {
            return arr;
        }
        
        int j;
        for (j = n - 1; j > i; j--) {
            if (arr[j] < arr[i] && (j == n - 1 || arr[j] != arr[j + 1])) {
                break;
            }
        }
        
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
        
        return arr;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1 Открытые школы — это возможность за месяц прокачать свои навыки и получить оффер в ИТ-холдинг Т1. С тебя — год опыта работы в ИТ, с нас — бесплатный онлайн-интенсив и топовые преподаватели. Что ты получишь? ✅ Уникальный рыночный опыт. Наши проекты ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и др. ✅ Быстрый рост в ИТ при экспертной поддержке. ✅ Материалы от HR, которые помогут прокачать резюме и подготовиться к интервью в Т1. ✅ Поддержка опытных преподавателей и уникальный карьерный фаст-трек до мидла в Т1 для выпускников интенсива. ✅ Реальный шанс получить оффер в Т1. Подавай заявку до 11 апреля и приходи учиться! Старт ИТ-интенсива уже 14 апреля. Подать заявку #реклама 16+ t1.ru О рекламодателе

Задача: 1279. Traffic Light Controlled Intersection Сложность: easy Здесь есть пересечение двух дорог. Первая дорога - это дорога A, по которой автомобили движутся с севера на юг в направлении 1 и с юга на север в направлении 2. Вторая дорога - дорога B, по которой машины едут с запада на восток в направлении 3 и с востока на запад в направлении 4. На каждой дороге перед перекрестком есть светофор. Зеленый означает, что автомобили могут пересекать перекресток в обоих направлениях. Красный означает, что автомобили в обоих направлениях не могут пересекать перекресток и должны ждать, пока загорится зеленый свет. Светофор не может гореть зеленым одновременно на обеих дорогах. Это значит, что когда на дороге А горит зеленый свет, на дороге Б он красный, а когда на дороге Б горит зеленый свет, на дороге А он красный. Изначально на дороге A горит зеленый сигнал светофора, а на дороге B - красный. Когда на одной дороге горит зеленый свет, все автомобили могут пересекать перекресток в обоих направлениях, пока на другой дороге не загорится зеленый.Два автомобиля, движущиеся по разным дорогам, не должны пересекать перекресток одновременно. Разработайте систему управления светофором на этом перекрестке без тупиков. Реализуйте функцию void carArrived(carId, roadId, direction, turnGreen, crossCar), где: carId - идентификатор автомобиля, который приехал. roadId - идентификатор дороги, по которой едет автомобиль. direction - направление движения автомобиля. turnGreen - функция, которую можно вызвать, чтобы переключить светофор на зеленый свет на текущей дороге. crossCar - функция, которую можно вызвать, чтобы позволить текущему автомобилю пересечь перекресток. Ваш ответ считается правильным, если он позволяет избежать тупика на перекрестке.Переключение светофора на зеленый свет на дороге, где он уже был зеленым, считается неправильным ответом. Пример:
Input: cars = [1,2,3,4,5], directions = [2,4,3,3,1], arrivalTimes = [10,20,30,40,40]
Output: [
"Car 1 Has Passed Road A In Direction 2",    // Traffic light on road A is green, car 1 can cross the intersection.
"Traffic Light On Road B Is Green",          // Car 2 requests green light for road B.
"Car 2 Has Passed Road B In Direction 4",    // Car 2 crosses as the light is green on road B now.
"Car 3 Has Passed Road B In Direction 3",    // Car 3 crosses as the light is green on road B now.
"Traffic Light On Road A Is Green",          // Car 5 requests green light for road A.
"Car 5 Has Passed Road A In Direction 1",    // Car 5 crosses as the light is green on road A now.
"Traffic Light On Road B Is Green",          // Car 4 requests green light for road B. Car 4 blocked until car 5 crosses and then traffic light is green on road B.
"Car 4 Has Passed Road B In Direction 3"     // Car 4 crosses as the light is green on road B now.
]
👨‍💻 Алгоритм: 1⃣Если на дороге, по которой едет автомобиль, уже зеленый свет, вызываем функцию crossCar. 2⃣Если на дороге, по которой едет автомобиль, красный свет, вызываем функцию turnGreen, чтобы переключить свет на зеленый, и затем вызываем функцию crossCar. 3⃣Обеспечиваем, что функции turnGreen и crossCar вызываются атомарно для предотвращения гонок и тупиков 😎 Решение:
using System;
using System.Threading;

public class TrafficLight {
    private int greenRoad = 1;
    private readonly object lockObj = new object();

    public void CarArrived(
        int carId,
        int roadId,
        int direction,
        Action turnGreen,
        Action crossCar
    ) {
        lock (lockObj) {
            if (greenRoad != roadId) {
                turnGreen();
                greenRoad = roadId;
            }
            crossCar();
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Бесплатный вебинар Развиваете продукт в сфере информационной безопасности? ⚡ Регистрируйтесь на вебинар ФРИИ и Солар 8 апреля
Бесплатный вебинар Развиваете продукт в сфере информационной безопасности? ⚡ Регистрируйтесь на вебинар ФРИИ и Солар 8 апреля в 17:00. Обсудим: — Как выглядит рынок российских ИБ-стартапов: какие ниши свободны, какие тренды заметны, какие возможности есть у компаний в 2025 году; — Путь ИБ-предпринимателя: как вырастить компанию с нуля до первых продаж, где искать первых клиентов, как стать одной из самых быстрорастущих компаний в сфере кибербезопасности в России; — Какие финансовые инструменты доступны компаниям, развивающими продукты в сфере ИБ. 📊 Опытом поделятся СЕО и основатель Metascan Давид Ордян, директор по венчурным инвестициям ГК «Солар» Владислав Рассказов и управляющий портфелем ФРИИ Илья Королев. Зарегистрируйтесь на сайте и до встречи онлайн! Зарегистрироваться #реклама 16+ invest.iidf.ru О рекламодателе

Задача: 273. Integer to English Words Сложность: hard Преобразуйте неотрицательное целое число num в его словесное представление на английском языке. Пример:
Input: num = 123
Output: "One Hundred Twenty Three"
👨‍💻 Алгоритм: 1⃣Обработка чисел до 20 и кратных 10 до 90: Создать массивы или словари для чисел от 1 до 19 и для кратных 10 от 20 до 90. Если число попадает в эти диапазоны, сразу вернуть соответствующее словесное представление. 2⃣Обработка сотен, тысяч, миллионов и миллиардов: Разделить число на группы по три цифры (единицы, тысячи, миллионы, миллиарды). Для каждой группы сформировать словесное представление с использованием рекурсивной функции для чисел от 1 до 999. 3⃣Формирование окончательного результата: Собрать словесное представление всех групп, добавив соответствующие суффиксы (тысячи, миллионы, миллиарды). Соединить все части в одну строку, удалив лишние пробелы. 😎 Решение:
public class Solution {
    private string[] belowTwenty = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
    private string[] tens = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
    private string[] thousands = {"", "Thousand", "Million", "Billion"};

    public string NumberToWords(int num) {
        if (num == 0) return "Zero";
        int i = 0;
        string result = "";
        
        while (num > 0) {
            if (num % 1000 != 0) {
                result = Helper(num % 1000) + thousands[i] + " " + result;
            }
            num /= 1000;
            i++;
        }
        return result.Trim();
    }

    private string Helper(int num) {
        if (num == 0) return "";
        else if (num < 20) return belowTwenty[num] + " ";
        else if (num < 100) return tens[num / 10] + " " + Helper(num % 10);
        else return belowTwenty[num / 100] + " Hundred " + Helper(num % 100);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Задача: 1004. Max Consecutive Ones III Сложность: medium Если задан двоичный массив nums и целое число k, верните максимальное количество последовательных 1 в массиве, если можно перевернуть не более k 0. Пример:
Input: nums = [1,1,1,0,0,0,1,1,1,1,0], k = 2
Output: 6
👨‍💻 Алгоритм: 1⃣Инициализация оконного подхода: Используйте два указателя для создания скользящего окна. Инициализируйте левый указатель в начале массива, правый указатель будет двигаться по массиву. Создайте переменную для подсчета количества нулей в текущем окне. 2⃣Перемещение правого указателя и обновление окна: Перемещайте правый указатель по массиву, обновляя количество нулей в текущем окне. Если количество нулей превышает k, сдвиньте левый указатель вправо до тех пор, пока количество нулей снова не станет допустимым (меньше или равно k). 3⃣Подсчет максимального количества последовательных единиц: На каждом шаге обновляйте максимальное количество последовательных единиц, сравнивая текущую длину окна (разница между правым и левым указателями) с текущим максимумом. 😎 Решение:
public class Solution {
    public int LongestOnes(int[] nums, int k) {
        int left = 0, maxOnes = 0, zeroCount = 0;

        for (int right = 0; right < nums.Length; right++) {
            if (nums[right] == 0) {
                zeroCount++;
            }

            while (zeroCount > k) {
                if (nums[left] == 0) {
                    zeroCount--;
                }
                left++;
            }

            maxOnes = Math.Max(maxOnes, right - left + 1);
        }

        return maxOnes;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Repost from easyoffer
Я боялся, что провалю собеседование. Так появился easyoffer Когда я только начинал искать первую работу программистом, меня п
+2
Я боялся, что провалю собеседование. Так появился easyoffer Когда я только начинал искать первую работу программистом, меня пугала мысль, что я просто не смогу ответить на вопросы на собеседовании. Типа… ты потратил месяцы на то, чтобы учиться, писал pet-проекты, собирал резюме, рассылаешь отклики — и всё может закончиться на одном-единственном вопросе, на который ты не знаешь ответ. Я реально боялся. Я смотрел видео mock-собеседований на YouTube, останавливал каждое, выписывал вопросы в Notion. Потом вручную писал к ним ответы. И потом ещё по нескольку раз перечитывал. Такой вот "тренажёр" на коленке. 📎 (там на картинке — один из моих реальных списков в Notion, ставь 🔥 если тоже так делал) В какой-то момент я посчитал — у меня уже было выписано больше 500 вопросов. Я почувствовал ужас. Потому что невозможно всё это зазубрить. А что, если спросят как раз тот, к которому я не успел подготовиться?.. Тогда и пришла идея А что если понять, какие из вопросов встречаются чаще всего? Чтобы не учить всё подряд, а сфокусироваться на главном. Так родился easyoffer. Сначала — просто как пет-проект, чтобы показать в резюме и подготовиться к собесам. А потом оказалось, что он реально помогает людям. За первые месяцы его посетили сотни тысяч человек. И я понял: это больше, чем просто пет-проект. Сейчас я делаю EasyOffer 2.0 И уже не один, а вместе с вами. В новой версии будут: – вопросы из реальных собесов, с фильтрацией по грейду, компании, типу интервью – тренажёр с карточками (по принципу интервальных повторений — как в Anki) – база задач с интервью – тренажёр «реальное собеседование», чтобы отрепетировать как в жизни Каждая фича упрощает и сокращает время на подготовку. Все эти штуки я бы мечтал иметь, когда сам готовился к собеседованиям. Я делаю всё на свои деньги. Никаких инвесторов. Только вы и я. Если вы хотите помочь — сейчас самое важное время. Краудфандинг уже стартовал. Благодаря нему я смогу привлечь больше людей для разработки, сбору и обработки собеседований. Все, кто поддержат проект до релиза, получат: 🚀 1 год PRO-доступа по цене месячной подписки. Его можно активировать в любое время, например когда начнете готовится к собесам. ➕ Доступ к закрытому бета-тесту Поддержать 👉 https://planeta.ru/campaigns/easyoffer Спасибо, что верите в этот проект 🙌

Задача: 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. Для любого времени во время итерации, если существует значение в корзине ключа, верните это значение. В противном случае, в конце верните пустую строку. 😎 Решение:
public class Solution {
    public IList<int> PancakeSort(int[] A) {
        var ans = new List<int>();
        for (int valueToSort = A.Length; valueToSort > 0; valueToSort--) {
            int index = Find(A, valueToSort);
            if (index == valueToSort - 1) {
                continue;
            }
            if (index != 0) {
                ans.Add(index + 1);
                Flip(A, index + 1);
            }
            ans.Add(valueToSort);
            Flip(A, valueToSort);
        }
        return ans;
    }

    protected void Flip(int[] sublist, int k) {
        int i = 0;
        while (i < k / 2) {
            int temp = sublist[i];
            sublist[i] = sublist[k - i - 1];
            sublist[k - i - 1] = temp;
            i += 1;
        }
    }

    protected int Find(int[] a, int target) {
        for (int i = 0; i < a.Length; i++) {
            if (a[i] == target) {
                return i;
            }
        }
        return -1;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Освойте Data Engineering Получи шанс стать частью команды в LEFT JOIN 🎓Чему научитесь: » использовать Python для анализа дан
Освойте Data Engineering Получи шанс стать частью команды в LEFT JOIN 🎓Чему научитесь: » использовать Python для анализа данных » составлять продвинутые SQL-запросы » самостоятельно извлекать данные из хранилищ » разрабатывать понятные отчеты и презентации 📊Научим правильно готовить данные любых размеров и сложностиКому подойдет обучение: » аналитикам данных, которые хотят лучше разобраться в ETL-процессах » инженерам данных, которые уже работают с хранилищами и хотят систематизировать свои знания. » BI-разработчикам, освоить архитектуру современных хранилищ и научиться их проектировать ❤️Мы поможем подготовиться к поиску работы😊 Ограниченное количество мест на курс Узнать больше #реклама 16+ karpov.courses О рекламодателе

Задача: 1002. Find Common Characters Сложность: easy Если задан массив строк words, верните массив всех символов, которые встречаются во всех строках внутри слов (включая дубликаты). Вы можете вернуть ответ в любом порядке. Пример:
Input: words = ["bella","label","roller"]
Output: ["e","l","l"]
👨‍💻 Алгоритм: 1⃣Инициализация частотного массива: Создайте массив для хранения минимальной частоты каждого символа, который будет встречаться во всех словах. 2⃣Обработка каждого слова: Для каждого слова создайте временный массив для хранения частоты каждого символа в этом слове. Обновите основной частотный массив, сравнивая его с временным массивом и сохраняя минимальные частоты каждого символа. 3⃣Формирование результата: Создайте результирующий массив, добавляя каждый символ столько раз, сколько его минимальная частота. 😎 Решение:
public class Solution {
    public IList<string> CommonChars(string[] words) {
        int[] minFreq = new int[26];
        Array.Fill(minFreq, int.MaxValue);
        
        foreach (string word in words) {
            int[] freq = new int[26];
            foreach (char c in word) {
                freq[c - 'a']++;
            }
            for (int i = 0; i < 26; i++) {
                minFreq[i] = Math.Min(minFreq[i], freq[i]);
            }
        }
        
        IList<string> result = new List<string>();
        for (int i = 0; i < 26; i++) {
            for (int j = 0; j < minFreq[i]; j++) {
                result.Add(((char)('a' + i)).ToString());
            }
        }
        return result;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Сможешь ли ты стать программистом? Пройди тест и узнай Дарим доступ к курсу по программированию✨ Чтобы получить доступ пройди
Сможешь ли ты стать программистом? Пройди тест и узнай Дарим доступ к курсу по программированию✨ Чтобы получить доступ пройди короткий тест из 5 вопросов на тему "Сможете ли вы стать программистом / разработчиком?" Узнать больше #реклама 16+ mrqz.me О рекламодателе

Задача: 1463. Cherry Pickup II Сложность: hard Дана матрица grid размером rows x cols, представляющая поле с вишнями, где grid[i][j] обозначает количество вишен, которые можно собрать с клетки (i, j). У вас есть два робота, которые могут собирать вишни: Робот №1 находится в левом верхнем углу (0, 0), а Робот №2 находится в правом верхнем углу (0, cols - 1). Верните максимальное количество собранных вишен с помощью обоих роботов, следуя приведённым ниже правилам: Из клетки (i, j) роботы могут перемещаться в клетку (i + 1, j - 1), (i + 1, j) или (i + 1, j + 1). Когда любой робот проходит через клетку, он подбирает все вишни, и клетка становится пустой. Когда оба робота находятся в одной клетке, только один из них собирает вишни. Оба робота не могут выходить за пределы матрицы в любой момент времени. Оба робота должны достичь нижней строки в матрице grid. Пример:
Input: grid = [[1,0,0,0,0,0,1],[2,0,0,0,0,3,0],[2,0,9,0,0,0,0],[0,3,0,5,4,0,0],[1,0,2,3,0,0,6]]
Output: 28
Explanation: Path of robot #1 and #2 are described in color green and blue respectively.
Cherries taken by Robot #1, (1 + 9 + 5 + 2) = 17.
Cherries taken by Robot #2, (1 + 3 + 4 + 3) = 11.
Total of cherries: 17 + 11 = 28.
👨‍💻 Алгоритм: 1⃣Определите трехмерный массив dp, где dp[row][col1][col2] представляет максимальное количество вишен, которые можно собрать, если робот 1 находится в (row, col1), а робот 2 находится в (row, col2). 2⃣Итеративно заполните dp, начиная с нижней строки, вычисляя для каждой клетки максимальное количество вишен, которое можно собрать с учетом возможных перемещений роботов. 3⃣Верните dp[0][0][n-1], что представляет максимальное количество вишен, которое можно собрать, начиная с верхнего левого и верхнего правого углов. 😎 Решение:
public class Solution {
    public int CherryPickup(int[][] grid) {
        int m = grid.Length;
        int n = grid[0].Length;
        int[,,] dp = new int[m, n, n];
        
        for (int row = m - 1; row >= 0; row--) {
            for (int col1 = 0; col1 < n; col1++) {
                for (int col2 = 0; col2 < n; col2++) {
                    int result = grid[row][col1];
                    if (col1 != col2) {
                        result += grid[row][col2];
                    }
                    if (row != m - 1) {
                        int maxCherries = 0;
                        for (int newCol1 = col1 - 1; newCol1 <= col1 + 1; newCol1++) {
                            for (int newCol2 = col2 - 1; newCol2 <= col2 + 1; newCol2++) {
                                if (newCol1 >= 0 && newCol1 < n && newCol2 >= 0 && newCol2 < n) {
                                    maxCherries = Math.Max(maxCherries, dp[row + 1, newCol1, newCol2]);
                                }
                            }
                        }
                        result += maxCherries;
                    }
                    dp[row, col1, col2] = result;
                }
            }
        }
        return dp[0, 0, n - 1];
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Ответьте на 1 вопрос и Яндекс Музыка 30 дней бесплатно Яндекс Музыка, Книги и Кинопоиск для вас и 3-х ваших близких 30 дней б
Ответьте на 1 вопрос и Яндекс Музыка 30 дней бесплатно Яндекс Музыка, Книги и Кинопоиск для вас и 3-х ваших близких 30 дней бесплатно. Попробуйте!👍 Попробовать #реклама 18+ mrqz.me О рекламодателе Реклама на Яндексе

Задача: 33. Search in Rotated Sorted Array Сложность: medium Дан отсортированный массив nums, который мог быть повернут в неизвестном индексе. Необходимо найти индекс элемента target или вернуть -1, если его нет. Алгоритм должен работать за O(log n). Пример:
Input: nums = [4,5,6,7,0,1,2], target = 0  
Output: 4  
👨‍💻 Алгоритм: 1⃣Использовать бинарный поиск для нахождения индекса поворота. 2⃣Определить, в какой из двух отсортированных частей массива находится target. 3⃣Выполнить бинарный поиск в нужной части массива. 😎 Решение:
public class Solution {
    public int Search(int[] nums, int target) {
        int left = 0, right = nums.Length - 1;

        while (left <= right) {
            int mid = left + (right - left) / 2;

            if (nums[mid] == target) return mid;

            if (nums[left] <= nums[mid]) {
                if (nums[left] <= target && target < nums[mid])
                    right = mid - 1;
                else
                    left = mid + 1;
            } else {
                if (nums[mid] < target && target <= nums[right])
                    left = mid + 1;
                else
                    right = mid - 1;
            }
        }

        return -1;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Скидка до 30% на вашу первую Яндекс Командировку ✨Получите скидку 30% на бронирование отеля вашей первой командировки. Все не
Скидка до 30% на вашу первую Яндекс Командировку ✨Получите скидку 30% на бронирование отеля вашей первой командировки. Все необходимые сервисы на единой платформе, для командировок по всему миру. Широкий выбор отелей и билетов. Без комиссий. Узнать больше #реклама business.go.yandex О рекламодателе Реклама на Яндексе

Задача: 1122. Relative Sort Array Сложность: easy Даны два массива arr1 и arr2, элементы arr2 уникальны, и все элементы arr2 также присутствуют в arr1. Отсортируйте элементы arr1 таким образом, чтобы относительный порядок элементов в arr1 был таким же, как в arr2. Элементы, которые не встречаются в arr2, должны быть размещены в конце arr1 в порядке возрастания. Пример:
Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
Output: [2,2,2,1,4,3,3,9,6,7,19]
👨‍💻 Алгоритм: 1⃣Инициализация и подсчёт: Инициализируйте пустой массив result и массив remaining для хранения оставшихся элементов. Создайте хеш-таблицу countMap для хранения количества вхождений каждого элемента из arr2 в arr1. 2⃣Заполнение countMap и remaining: Пройдитесь по элементам arr1 и если элемент присутствует в countMap, увеличьте его счетчик. Если элемент не присутствует в arr2, добавьте его в remaining. 3⃣Формирование результирующего массива: Пройдитесь по arr2 и добавьте элементы в result в соответствии с их количеством в countMap. Отсортируйте массив remaining и добавьте его элементы в result. Верните result в виде массива. 😎 Решение:
public class Solution {
    public int[] RelativeSortArray(int[] arr1, int[] arr2) {
        var countMap = new Dictionary<int, int>();
        var remaining = new List<int>();
        var result = new List<int>();

        foreach (var value in arr2) {
            countMap[value] = 0;
        }

        foreach (var value in arr1) {
            if (countMap.ContainsKey(value)) {
                countMap[value]++;
            } else {
                remaining.Add(value);
            }
        }

        remaining.Sort();

        foreach (var value in arr2) {
            for (int i = 0; i < countMap[value]; i++) {
                result.Add(value);
            }
        }

        result.AddRange(remaining);
        return result.ToArray();
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Сколько приложений нужно вашей команде для работы? Всего один сервис — Битрикс24! А внутри десятки инструментов для совместно
+7
Сколько приложений нужно вашей команде для работы? Всего один сервис — Битрикс24! А внутри десятки инструментов для совместной работы и бизнеса. Читайте подробнее в карточках. Регистрируйтесь сейчас, чтобы забрать их все себе бесплатно😊 Зарегистрироваться #реклама 16+ office-online.bitrix24.ru О рекламодателе

Задача: 1238. Circular Permutation in Binary Representation Сложность: medium Даны 2 целых числа n и start. Ваша задача - вернуть любую перестановку p из (0,1,2.....,2^n -1) такую, что : p[0] = start p[i] и p[i+1] отличаются только одним битом в их двоичном представлении. p[0] и p[2^n -1] также должны отличаться только одним битом в их двоичном представлении. Пример:
Input: n = 2, start = 3
Output: [3,2,0,1]
👨‍💻 Алгоритм: 1⃣Генерация Грей-кода: Генерация Грей-кода для чисел от 0 до 2𝑛−1 2⃣Определение начальной позиции: Находим индекс числа start в последовательности Грей-кода. 3⃣Построение перестановки: Формируем перестановку, начиная с числа start и следуя по циклическому Грей-коду. 😎 Решение:
using System;
using System.Collections.Generic;
using System.Linq;

public class Solution {
    public IList<int> CircularPermutation(int n, int start) {
        var gray = GrayCode(n);
        int startIndex = gray.IndexOf(start);
        var result = new List<int>();
        result.AddRange(gray.Skip(startIndex));
        result.AddRange(gray.Take(startIndex));
        return result;
    }

    private List<int> GrayCode(int n) {
        var result = new List<int>();
        int numElements = 1 << n;
        for (int i = 0; i < numElements; i++) {
            result.Add(i ^ (i >> 1));
        }
        return result;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Онлайн-магистратура: Науки о данных и искусственный инт. День открытых дверей 9 апреля в 19:00 мск | Онлайн Эксперты Яндекса и МИФИ расскажут об очной онлайн-магистратуре для карьеры в IT. Всё о поступлении и обучении, выступления экспертов, ответы на вопросы. Выбирайте всё: работу и учёбу, навыки и диплом магистра. Записаться онлайн #реклама 16+ praktikum.yandex.ru О рекламодателе