главная новое лучшее написать
неделя месяц год вечное
посты пользователи ответы

3 leetcoder 19-12-2024 к записи «Shortest write-up ever!»

Честный разбор с решением, которое не стыдно показать на собеседовании, я всё же сделаю :)

Идея 💡

Задача состоит в том, чтобы разделить массив на максимальное количество блоков, так чтобы сортировка каждого блока и их объединение давали отсортированный массив. Ключевая идея заключается в том, что элементы из одного цикла перестановки

arr1arr2arr3 → ... → arrnarr1

обязательно должны находиться в одном блоке, так как они взаимозависимы.

Описание подхода 🛠️

  1. Создаём массив chunk_assignment, чтобы отслеживать принадлежность каждого индекса к определённому блоку.
  2. Используем функцию assign_chunk для рекурсивного назначения всех индексов, связанных с текущим индексом, в один блок. Она:
    • Обновляет максимальный индекс текущего блока.
    • Помечает все посещённые индексы текущим номером блока.
  3. Внешний цикл:
    • Перебирает индексы массива.
    • Увеличивает счётчик блоков при обнаружении нового блока.
    • Завершает обработку текущего блока, когда все его элементы покрыты.
  4. Возвращаем общее количество блоков

Асимптотика 📊

Исходный код решения 📜

impl Solution {
    pub fn max_chunks_to_sorted(arr: Vec<i32>) -> i32 {
        let n = arr.len();
        let mut chunk_assignment = vec![0; n]; // Tracks which chunk each index belongs to
        let mut chunk_count = 0; // Counter for the number of chunks

        // Helper function to assign indices to a chunk
        let mut assign_chunk = |start_idx: usize, chunk: i32, max_idx: &mut usize| {
            let mut current_idx = start_idx;
            while chunk_assignment[current_idx] == 0 {
                *max_idx = (*max_idx).max(current_idx);
                chunk_assignment[current_idx] = chunk;
                current_idx = arr[current_idx] as usize;
            }
        };

        let mut start_idx = 0;
        while start_idx < n {
            chunk_count += 1; // Start a new chunk
            let mut max_idx = start_idx;

            // Process the current chunk until all related indices are covered
            loop {
                assign_chunk(start_idx, chunk_count, &mut max_idx);
                if start_idx == max_idx {
                    break; // The current chunk is complete
                }
                start_idx += 1; // Move to the next index
            }
            start_idx += 1; // Move to the next unprocessed index
        }

        chunk_count // Return the total number of chunks
    }
}
перейти
 в ответ на чей-то комментарий к записи «Shortest write-up ever!»

2 kitesh 17-12-2024 к записи «Посвящается Сепиру и Уорфу»

Кажется что мы разговариваем на сильно разных английских.

По моему опыту:
- slayer вышел из употребления, последние пару раз я видел это слово в названии группы
- triggerman, manslayer вообще ни разу в жизни не встречал
- cutthroat до сегодняшнего дня был уверен что это исключительно прилагательное
- insecurity имхо к ревности имеет крайне опосредованое отношение, оно скорее про низкую самооценку и недостаток признания
- intelligentsia видел только применительно к СССР, в дискуссиях о США это скорее cultural elite/educated class/chattering class

перейти
2 finder 19-12-2024 к записи «Shortest write-up ever!»

Я освободил свой разум и понял первое решение. По-моему, его не стыдно и на собесе написать (разве что не в таком стиле, а циклом), оно не эзотерическое.

перейти
2 finder 17-12-2024 к записи «Жадная сборка строки с ограничениями 😊»

Интересно, в каких компаниях такие ужасы спрашивают. У меня платного leetcode нет, не подскажешь, если у тебя есть, конечно?

перейти
 в ответ на чей-то комментарий к записи «Посвящается Сепиру и Уорфу»

 в ответ на чей-то комментарий к записи «Shortest write-up ever!»

 в ответ на чей-то комментарий к записи «Очередь с приоритетами для оптимальной подгонки среднего уровня студентов 🎯»

1 finder 16-12-2024 к записи «Очередь с приоритетами для оптимальной подгонки среднего уровня студентов 🎯»

Для максимизации среднего соотношения нужно жадно добавлять студентов

Почему? Это совершенно не очевидное математически утверждение. У нас тут какая-то очень ядреная функция от n переменных, почему жадным методом мы придем в её глобальный минимум, а не в локальный?

перейти
 в ответ на чей-то комментарий к записи «Пятница, 13-е, чудовища из зазеркалья»

 в ответ на чей-то комментарий к записи «Пятница, 13-е, чудовища из зазеркалья»

 в ответ на чей-то комментарий к записи «Shortest write-up ever!»

 в ответ на чей-то комментарий к записи «Жадная сборка строки с ограничениями 😊»