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

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
    }
}
перейти
2 leetcoder 13-01-2025 к записи «Проверка возможности коррекции скобочной записи с использованием итераторов 🚀»

Небезынтересно выглядит реализация этого же подхода на Go – у них весьма своеобразно реализуются итераторы в неожиданном для Go функциональном стиле. В реальной же практике такое редко гошники практикуют, как я понимаю, — гораздо проще байты строки in-place инвертировать.

// CharLockPair represents a character and its corresponding lock state.
type CharLockPair struct {
    char, lock rune
}

// Seq defines a functional iterator for yielding elements of type T.
type Seq[T any] func(func(T) bool)

// canBeValid checks if the given string can be a valid parentheses string.
func canBeValid(s, locked string) bool {
    if len(s)%2 != 0 {
        return false
    }

    // Forward pass
    if !checkBalance(forwardIter(s, locked)) {
        return false
    }

    // Backward pass
    if !checkBalance(backwardIter(s, locked)) {
        return false
    }

    return true
}

// checkBalance processes the iterator and determines if the sequence is balanced.
func checkBalance(seq Seq[CharLockPair]) bool {
    balance, free := 0, 0

    for pair := range seq {
        char, lock := pair.char, pair.lock

        if lock == '0' {
            free++
        } else if char == '(' {
            balance++
        } else {
            balance--
        }

        if balance < 0 {
            if free == 0 {
                return false // Stop iteration early
            }
            balance++
            free--
        }
    }

    return balance <= free
}

// forwardIter generates an iterator for the forward pass.
func forwardIter(s, locked string) Seq[CharLockPair] {
    return func(yield func(CharLockPair) bool) {
        for i := 0; i < len(s); i++ {
            if !yield(CharLockPair{char: rune(s[i]), lock: rune(locked[i])}) {
                return
            }
        }
    }
}

// backwardIter generates an iterator for the backward pass with swapped characters.
func backwardIter(s, locked string) Seq[CharLockPair] {
    return func(yield func(CharLockPair) bool) {
        for i := len(s) - 1; i >= 0; i-- {
            char := rune(s[i])
            if char == '(' {
                char = ')'
            } else {
                char = '('
            }
            if !yield(CharLockPair{char: char, lock: rune(locked[i])}) {
                return
            }
        }
    }
}
перейти
3 finder 25-04-2024 к записи «Hot Take #7: Нам *нужна* евгеника»

Тут про цифры и факты в соседнем треде перетерли, давай еще личный аргумент вкину.

У меня двое детей. Старшая дочь инвалид, с тяжелым неизлечимым наследственным заболеванием, очень сильно коррелирующим с математическими способностями родителей. Наследуемым как-то хитро и непонятно, как именно, например, у меня в роду до этого не было, насколько мне известно. Но доказано, что наследственным. Младший сын обычный мальчик. В обществе, где идеи евгеники общеприняты, были бы возможны такие варианты:
- мне и жене вообще было бы запрещено иметь детей, т.к. математикам не положено
- мне было бы запрещено заводить второго ребёнка, а то вон какой первый

Вариант "евгеника в данном случае никак бы не повлияла, т.к. механизм заболевания не очевиден, а у нас будет правильная евгеника, только с научными доказательствами через peer-reviewed studies" мне кажется неправдоподобным, в обществе так не бывает.

В первом варианте была бы совсем другая жизнь. Конечно, постфактум я никогда бы не согласился перенестись из этой части мультивселенной в ту, потеряв сына. Даже если не знать об альтернативе, там я был бы зверски зол и точно был бы в оппозиции к евгенике. Моя жизнь там, конечно, была бы проще.

Второй вариант строго хуже моей теперешней жизни, я даже затрудняюсь сформулировать, насколько, это просто разные вселенные.

Соответственно, я лично не могу нормально относиться к евгенике, а потому не могу желать ее и для других согласно золотому правилу.

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

2 leetcoder 20-03-2025 к записи «🔗 Оптимальный поиск минимальной AND-стоимости пути »

Полезно заметить, что если использовать для разбиения на компоненты связности подход с Disjoint Set Unions, — можно получить решение, работающее на практике в 2 раза быстрее за счёт более эффективных аллокаций памяти (нет необходимости поддерживать списки смежности).

struct UnionFind {
    parent: Vec<usize>,
    size: Vec<usize>,
    min_and: Vec<i32>,
}

impl Solution {
    pub fn minimum_cost(n: i32, edges: Vec<Vec<i32>>, query: Vec<Vec<i32>>) -> Vec<i32> {
        let n = n as usize;
        let mut uf = UnionFind::new(n);

        // Process edges to construct the Union-Find structure
        for edge in &edges {
            let (u, v, w) = (edge[0] as usize, edge[1] as usize, edge[2]);
            uf.union(u, v, w);
        }

        // Process queries efficiently
        query.into_iter().map(|q| {
                let (s, t) = (uf.find(q[0] as usize), uf.find(q[1] as usize));
                if s == t { uf.min_and[s] } else { -1 }
            }).collect()
    }
}

impl UnionFind {
    fn new(n: usize) -> Self {
        UnionFind {
            parent: (0..n).collect(),
            size: vec![1; n],
            min_and: vec![-1; n],
        }
    }

    fn find(&mut self, x: usize) -> usize {
        if self.parent[x] != x {
            self.parent[x] = self.find(self.parent[x]); // Path compression
        }
        self.parent[x]
    }

    fn union(&mut self, a: usize, b: usize, weight: i32) {
        let mut root_a = self.find(a);
        let mut root_b = self.find(b);

        if root_a != root_b {
            // Union by size: attach the smaller tree under the larger tree
            if self.size[root_a] < self.size[root_b] {
                std::mem::swap(&mut root_a, &mut root_b);
            }
            self.parent[root_b] = root_a;
            self.size[root_a] += self.size[root_b];
            self.min_and[root_a] &= self.min_and[root_b];
        }

        // Update min_and for the new root
        self.min_and[root_a] &= weight;
    }
}
перейти
4 anonymous 10-04-2024 к записи «Гениальная идея »

1) где купить?
2) если купить пока негде, то где подписаться на криптотокен этой идеи?

перейти
3 ydmitry 14-05-2024 к записи «Короткие фантастические рассказы»

Про Шекли ты уже сказал, надеюсь не имеешь в виду только один его рассказ.

Из менее известных очень рекомендую Грега Игана. Кроме рассказов, у него и романы суперские ("Карантин", "Город перестановок", остальные тоже неплохи, но мне уже меньше понравились).

Можно начать с рассказов "Во тьму" и "Тёмные целые", чтобы оценить оригинальность идей. А потом просто любой брать и наслаждаться.

перейти
3 wd28 07-05-2024 к записи «Короткие фантастические рассказы»

Попробуй достать архив журнала "Полдень, XXI век", мне кажется, как раз то, что тебе может быть интересно. Он закрылся в 2013, сейчас под таким же названием выпускаются периодические альманахи, но про них я не могу сказать, ок или нет.

перейти
1 leetcoder 27-02-2025 к записи «🚀 Двунаправленный итератор + оптимизированный ДП для поиска самой длинной фибоначчиевой подпоследовательности»

Интересным выглядит способ, как красиво декомпозировать решение.
Для этого мы выделим итератор по всем кортежам {(x,y) | x+y=z} в отдельный метод.

use std::collections::HashMap;
use std::cmp::Ordering;

impl Solution {
    pub fn len_longest_fib_subseq(arr: Vec<i32>) -> i32 {
        let n = arr.len();
        let mut dp: HashMap<(i32, i32), i32> = HashMap::new(); // DP table storing lengths of valid subsequences

        // Iterate over each element z as a potential end of a Fibonacci-like sequence
        for k in 2..n {
            let z = arr[k];

            // Use an iterator to find all valid pairs (x, y) where x + y = z
            for (x, y) in Self::pair_sum_iterator(arr[..k].iter(), z) {
                // Apply DP transition: dp[z, y] = dp[y, x] + 1, defaulting to 2 if not found
                let cur_len = dp.get(&(y, x)).unwrap_or(&2) + 1;

                // Store computed length for (z, y)
                dp.insert((z, y), cur_len);
            }
        }

        // Return the longest found subsequence length, or 0 if none exist
        *dp.values().max().unwrap_or(&0)
    }

    /// A helper function that iterates over pairs (x, y) in a sorted array slice,
    /// finding pairs where x + y == target_sum using a two-pointer approach.
    fn pair_sum_iterator<'a>(mut iter: impl DoubleEndedIterator<Item = &'a i32>, target_sum: i32) -> impl Iterator<Item = (i32, i32)> {
        std::iter::from_fn(move || {
            let mut front = iter.next();
            let mut back = iter.next_back();

            while let (Some(&x), Some(&y)) = (front, back) {
                match (x + y).cmp(&target_sum) {
                    Ordering::Equal => return Some((x, y)), // Found a valid pair (x, y)
                    Ordering::Less => front = iter.next(),  // Increase x to increase the sum
                    Ordering::Greater => back = iter.next_back(), // Decrease y to reduce the sum
                }
            }
            None
        })
    }
}
перейти
3 finder 07-05-2024 к записи «Короткие фантастические рассказы»

1) Тед Чан

2) Если читаешь по-английски, то рекомендую qntm, особенно вот эти:
- https://qntm.org/responsibilit
- https://qntm.org/mmacevedo (есть переводы на русский, в т.ч. мой)
- https://qntm.org/gorg

перейти
3 anonymous 17-04-2024 к записи «Комиксы про AI»

Алармисты любят пугать непредсказуемостью general|super AI. А готовы ли они к такому?
image

перейти
2 leetcoder 03-12-2024 к записи «Эффективное добавление пробелов в строку 🚀»

Ещё один простой вариант решения - собрать все слайсы, отвечающие словам в одну коллекцию и проджойнить стандартными средствами через пробел.

impl Solution {
    pub fn add_spaces(s: String, spaces: Vec<i32>) -> String {
        // Convert indices to usize
        let mut spaces: Vec<usize> = spaces.into_iter().map(|s_pos| s_pos as usize).collect();

        // Add the start (0) and end (s.len()) boundaries to spaces
        spaces.insert(0, 0);
        spaces.push(s.len());

        // Create slices from spaces indices
        let slices: Vec<&str> = spaces.windows(2)
            .map(|window| &s[window[0]..window[1]])
            .collect();

        // Join the slices with spaces
        slices.join(" ")
    }
}

В этом коде есть один грустный момент - необходимость создания промежуточного вектора из слайсов исходной строки.
К сожалению, join из стандартной библиотеки позволяет только такое использование.
Но, если мы не ограничеы стандартной библиотекой, то крейт itertools спешит нам на помощь ;)

перейти
 в ответ на чей-то комментарий к записи «Комиксы про AI»

2 leetcoder 06-02-2025 к записи «🧮💥 Частотный анализ для подсчета кортежей с равными произведениями»

На практических масштабах решение со сложностью O(N²logN) (сложить все произведения в вектор, который потом отсортировать и посчитать частоты по нему) работает немного (на 20%) быстрее.
Хороший пример, когда константа от хэш-таблицы даёт больший вклад, чем логарифм от сортировки!

impl Solution {
    pub fn tuple_same_product(nums: Vec<i32>) -> i32 {
        // Build vector of products for all unique pairs.
        let mut products: Vec<_> = (1..nums.len())
            .flat_map(|j| (0..j).map(|i| nums[i] * nums[j]).collect::<Vec<_>>())
            .collect();

        // Sort to group identical products.
        products.sort_unstable();

        // Group products, calculate frequency-based contributions, and sum them.
        4 * products.chunk_by(|a, b| a == b)
            .filter_map(|group| if group.len() > 1 {Some(group.len() as i32)} else {None})
            .map(|freq| freq * (freq - 1))
            .sum::<i32>()
    }
}
перейти
2 leetcoder 03-02-2025 к записи «😊 Простое 3-х строчное решение для нахождения самой длинной монотонной последовательности»

Можно предоставить также и решение за один проход.
Мне кажется, что оно менее изящно. Но всё-равно имеет право быть упомянутым:

use std::cmp::Ordering;

impl Solution {
    pub fn longest_monotonic_subarray(nums: Vec<i32>) -> i32 {
        nums.windows(2).fold((1, 1, 1), |(max_chain, inc_chain, dec_chain), w| {
            match w[1].cmp(&w[0]) {
                // extend decreasing chain; reset increasing chain; update max_chain
                Ordering::Less => (max_chain.max(dec_chain + 1), 1, dec_chain + 1),
                // reset both chains on equal elements
                Ordering::Equal => (max_chain, 1, 1), 
                // extend increasing chain; reset decreasing chain; update max_chain
                Ordering::Greater => (max_chain.max(inc_chain + 1), inc_chain + 1, 1),
            }
        }).0
    }
}
перейти
 в ответ на чей-то комментарий к записи «Shortest write-up ever!»

2 finder 24-04-2024 к записи «Воспоминания математиков»

Не защищая Лысенко, хочу заметить, что нам сейчас известен правильный ответ и история выглядит очевидной. Однако же в первой половине ХХ века теорвер и особенно матстатистика в ноосфере были почему-то очень тесно связаны с евгеникой (и социал-дарвинизмом вообще). Пирсон (тот самый) и Фишер (опять же тот самый) не просто занимались тем и другим, они буквально и то, и другое создали и популяризовали среди интеллектуалов. Причем, по-видимому, значительная часть чисто теоретических работ Пирсона целью имела именно получить инструмент для выяснения вопросов типа "насколько сильно должны отличаться средние IQ двух популяций, чтобы это уже нельзя было объявить случайностью". Ну про корреляции тоже понятно.

перейти
 в ответ на чей-то комментарий к записи «🏆 Оптимальный анализ подстрок, состоящих из одного символа»

2 leetcoder 15-01-2025 к записи «🔥 Жадный побитовый подход для решения задачи минимизации XOR»

Ну и добавлю без объяснений более короткое решение, с использованием продвинутых битовых хаков, которое стоит попробовать осмыслить самостоятельно.

impl Solution {
    pub fn minimize_xor(num1: i32, num2: i32) -> i32 {
        let n1 = num1.count_ones();
        let n2 = num2.count_ones();

        let mut result = num1;
        for _ in n1..n2 {
            result |= result + 1
        }

        for _ in n2..n1 {
            result &= result -1 
        }

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

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

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

перейти
 в ответ на чей-то комментарий к записи «Воспоминания математиков»

2 someanonimcoder 07-05-2024 к записи «KAN'ы и ряды Фурье»

Fun fact, ставящий под сомнение осмысленность модели: ее не попробовали ни на каких реальных данных. Как мне кажется, вариантов три:
- оно настолько бесполезное что даже на мнисте не завелось
- завелось, но результаты такие что стремно показать
- просто забили - неправдоподобная версия(ну странно же придумать новую архитектуру, описать ее теоретическое обоснование преимуществ и не попробовать ее ну хотя бы на паре первых попавшихся датасетов с kaggle)

перейти
 в ответ на чей-то комментарий к записи «Hot take #6»

2 anonymous 01-04-2024 к записи «Hot take #6»

Наша жизнь вообще ломает нам социальные привычки: много людей с которыми мы контактируем и немного действительно близких. Наша социальная обезьяна против - вот и приходится устраивать видимость близости ака тимбилдинги. И да, человек с придушенной обезьяной будет лучшим руководителем

перейти
2 finder 03-05-2024 к записи «KAN'ы и ряды Фурье»

Вот тут чувак попробовал как раз ряды Фурье https://news.ycombinator.com/item?id=40222212

В целом насчет хайпа вокруг KAN даже не знаю, статья выглядит прямым нарушением принципа the bitter lesson: давайте перейдем на что-то не GPU-friendly ради выигрыша в размере модели.

перейти
2 asandler2 25-04-2024 к записи «Hot Take #7: Нам *нужна* евгеника»

Как это бъётся с тем, что темп роста населения Земли 1) уже замедлился, и 2) будет только продолжать замедляться? Зачем заниматься отбором, когда и так скоро расти ничего не будет?

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

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

перейти
2 someanonimcoder 07-05-2024 к записи «Короткие фантастические рассказы»

не короткое, но советую - "Факап" Харитонова, весьма качественный фанфик-полемика со Стругацкими(конкретно миром полудня), Рубидий(аналогично с ПНВС)

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

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

перейти
2 finder 10-12-2024 к записи «🏆 Оптимальный анализ подстрок, состоящих из одного символа»

А в Rust нет аналога std::nth_element? Можно было бы от klogk избавиться (не то чтобы это на практике очень важно, конечно)

перейти
2 someanonimcoder 07-05-2024 к записи «Короткие фантастические рассказы»

"Тройной контакт", Юдковски
"Привключения пилота пиркса", Лем - если вдруг еще нет

перейти
1 leetcoder 18-03-2025 к записи «🔥 Поиск наибольшего «красивого» подмассива методом скользящего окна в чистом функциональном стиле»

Привычное итеративное решение, конечно, стоит также привести для сравнения

impl Solution {
    pub fn longest_nice_subarray(nums: Vec<i32>) -> i32 {
        let mut current_bitset = 0;
        let mut max_len = 0;
        let mut left = 0;

        for (right, &val) in nums.iter().enumerate() {
            // Shrink the window if nums[right] conflicts with current_bitset
            while current_bitset & val != 0 {
                current_bitset ^= nums[left];
                left += 1;
            }

            // Expand the window by including nums[right]
            current_bitset |= val;
            max_len = max_len.max((right - left + 1) as i32);
        }

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

 в ответ на чей-то комментарий к записи «Hot Take #7: Нам *нужна* евгеника»

 в ответ на чей-то комментарий к записи «Hot Take #4»

 в ответ на чей-то комментарий к записи «Воспоминания математиков»

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

Выглядит как хайп ради хайпа. Также как было с микро черными дырами от Большого Андронного Коллайдера.

То, что бактерию никто не сможет съесть вообще не означает, что она будет размножаться свободно. Как минимум конкурентная борьба за ресурсы с более приспособленными к борьбе обычными бактериями её сильно ограничит.
Ну и касательно ресурсов. Такая бактерия, как я понимаю, скорее всего будет хемотрофной, а вот для современных хемотрофов ниши весьма специфичны - ни разу не серая слизь по описанию.

перейти
1 asandler2 15-04-2024 к записи «Моя мечта мертва, поэтому я здесь»
  1. Перевод просто ужасен, нет смысла его обсуждать. Это переводил надмозг.
  2. "Переводчика" знаю лично, он преподавал на Физтехе какую-то чушь под названием "История инноваций". В целом нормальный предмет, но материал был совершенно не заметен из-за непомерного эго рассказчика. Не рекомендую читать то, что он пишет (ну или строго в гомеопатических дозах).
  3. Бич современного ютуба - растягивать одну простую мысль в видео на 13-15-20 минут. Ужасно бесит, но алгоритм по другому не накрутишь.
перейти
1 finder 27-04-2024 к записи «Fallout»

Например, сценарист - Джонатан Нолан (брат режиссера и сценарист фильмов "Мементо", "Престиж", "Темный рыцарь", "Интерстеллар").

Абстрагируясь от поисков глубокого смысла, просто смотреть интересно, а в киношке это главное. Стилистика свежая и необычная (кровь-кишки-постапокалипсис на фоне радостного солнечного дня), куча мелких деталей большого мира. Конечно, нужно сказать спасибо исходной вселенной, но всё это как минимум не потеряли.

перейти
 в ответ на чей-то комментарий к записи «Моя мечта мертва, поэтому я здесь»

1 leetcoder 02-12-2024 к записи «🔍 Найти слово по префиксу!»

Даже в этом решении, если заглянуть глубже split_whitespace не массив слайсов возвращает, а итератор по ним
sruct.SplitWhitespace. В спецификации его характеристики по дополнительной памяти не уточняются, но вполне возможно реализовать такой итератор на константных костах. И можно обсудить как сделать итератор с такими гарантиями самостоятельно.

перейти
1 exunitato 26-04-2024 к записи «Hot Take #7: Нам *нужна* евгеника»
  1. Вымирание через деградацию отдельной ветви человечества - вполне себе эволюционный механизм. Может оно так и надо?
  2. Мне кажется, исходное предположение, что «выживают почти все» - спорно. Посмотрите на Африку и страны третьего мира.
  3. Лишая человечество отклонений от «нормы», мы теряем не только нефункциональных членов общества, но и гениев от искусства, например. Хотим ли мы этого?
перейти
 в ответ на чей-то комментарий к записи «Shortest write-up ever!»

 в ответ на чей-то комментарий к записи «Воспоминания математиков»

 в ответ на чей-то комментарий к записи «Моя мечта мертва, поэтому я здесь»

1 anonymous 01-12-2024 к записи «💡 Проверка существования элемента совместно со своим удвоением»

Ненавижу такие задачи. Алгоритмически она тривиальная, но, конечно же, в условиях таймпрессинга я с какой-то вероятностью забуду про спецслучай нуля. Это ничего не говорит не только о моем умении программировать, но даже о моем умении решать литкод. Да, в жизни тоже бывают спецслучаи, про которые нельзя забывать, и это часть работы. Но не такие!

перейти
 в ответ на чей-то комментарий к записи «🏆 Оптимальный анализ подстрок, состоящих из одного символа»

1 leetcoder 04-03-2025 к записи «🚀 Разбиение массива вокруг опорного элемента с сохранением порядка»

Стоит также обратить внимание на чуть более медленное, зато короткое решение через стабильную сортировку

impl Solution {
    pub fn pivot_array(mut nums: Vec<i32>, pivot: i32) -> Vec<i32> {
        nums.sort_by_key(|&num| num.cmp(&pivot)); nums
    }
}
перейти
 в ответ на чей-то комментарий к записи «Очередь с приоритетами для оптимальной подгонки среднего уровня студентов 🎯»

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

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

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

перейти
 в ответ на чей-то комментарий к записи «Hot take #6»

1 anonymous 02-12-2024 к записи «🔍 Найти слово по префиксу!»

В реальном собеседовании поверх такой задачи будет доп.требование "...без выделения доп.памяти", тогда у нее появляется понятный смысл -- проверить умение человека не запутаться в двух индексах и краевых условиях.

перейти
1 leetcoder 11-02-2025 к записи «🚀 Эффективное удаление подстроки с помощью КМП»

@ finder
Посмотри, пожалуйста, почему обещаемая в документации "быстрая ссылка на википедию" не срабатывает у меня:

[[Алгоритм_Кнута_—Морриса—_Пратта]]

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

 в ответ на чей-то комментарий к записи «KAN'ы и ряды Фурье»

1 heni 19-04-2024 к записи «Комиксы про AI»

There is a programmer...

перейти
1 someanonimcoder 12-04-2024 к записи «С праздником!»

К сожалению вот это начинает сбываться

https://www.youtube.com/watch?v=Z5jToSOy9Og

перейти
1 art 02-04-2024 к записи «Hot take #6»

А есть ли разница между руководителем и лидером? Должен ли и лидер быть социопатом?

перейти
1 petros 14-04-2024 к записи «Ну это, та самая штучка, в общем, вы поняли»

Пора создать модель на базе думающего меньшинства, чтобы сделать мир чуточку лучше

перейти
1 finder 07-02-2025 к записи «🚀 Отслеживание цветов шариков с использованием 2 HashMap»

Я, видимо, туплю, хеш-таблицы-то зачем? Двух массивов хватило бы?

перейти
1 finder 10-04-2024 к записи «Гениальная идея »

disclaimer: автор не я, а какой-то киберсквоттер!

перейти
1 finder 01-12-2024 к записи «Сертификат протух?»

Хм, здесь появилась жизнь! Сертификат обновил =)

перейти
1 anonymous 17-04-2024 к записи «Комиксы про AI»

Roko

перейти
1 1e9y 03-09-2024 к записи «Сертификат протух?»

Нужно было начать с чата в Телеграме!

перейти
 в ответ на чей-то комментарий к записи «С праздником!»

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

 в ответ на чей-то комментарий к записи «Воспоминания математиков»

1 moonug 01-09-2024 к записи «Сертификат протух?»

Кто здесь? :)

перейти
 в ответ на чей-то комментарий к записи «Эффективное добавление пробелов в строку 🚀»

 в ответ на чей-то комментарий к записи «🚀 Отслеживание цветов шариков с использованием 2 HashMap»

 в ответ на чей-то комментарий к записи «Моя мечта мертва, поэтому я здесь»

 в ответ на чей-то комментарий к записи «Hot Take #4»

 в ответ на чей-то комментарий к записи «Воспоминания математиков»

 в ответ на чей-то комментарий к записи «🔍 Найти слово по префиксу!»

 в ответ на чей-то комментарий к записи «Моя мечта мертва, поэтому я здесь»

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

 в ответ на чей-то комментарий к записи «🔍 Найти слово по префиксу!»

 в ответ на чей-то комментарий к записи «Hot Take #7: Нам *нужна* евгеника»

 в ответ на чей-то комментарий к записи «Hot Take #7: Нам *нужна* евгеника»

 в ответ на чей-то комментарий к записи «С праздником!»

 в ответ на чей-то комментарий к записи «Моя мечта мертва, поэтому я здесь»

 в ответ на чей-то комментарий к записи «Моя мечта мертва, поэтому я здесь»

 в ответ на чей-то комментарий к записи «KAN'ы и ряды Фурье»

 в ответ на чей-то комментарий к записи «🚀 Отслеживание цветов шариков с использованием 2 HashMap»

 в ответ на чей-то комментарий к записи «KAN'ы и ряды Фурье»

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

 в ответ на чей-то комментарий к записи «Hot Take #4»

 в ответ на чей-то комментарий к записи «Hot Take #7: Нам *нужна* евгеника»

 в ответ на чей-то комментарий к записи «🚀 Отслеживание цветов шариков с использованием 2 HashMap»

 в ответ на чей-то комментарий к записи «🏆 Оптимальный анализ подстрок, состоящих из одного символа»

 в ответ на чей-то комментарий к записи «Hot Take #4»

 в ответ на чей-то комментарий к записи «Hot Take #7: Нам *нужна* евгеника»

 в ответ на чей-то комментарий к записи «С праздником!»

 в ответ на чей-то комментарий к записи «Hot Take #4»

 в ответ на чей-то комментарий к записи «Hot Take #4»

 в ответ на чей-то комментарий к записи «Hot Take #7: Нам *нужна* евгеника»

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

 в ответ на чей-то комментарий к записи «Hot Take #7: Нам *нужна* евгеника»

 в ответ на чей-то комментарий к записи «Hot Take #7: Нам *нужна* евгеника»

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

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

 в ответ на чей-то комментарий к записи «Короткие фантастические рассказы»

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

 в ответ на чей-то комментарий к записи «Hot take #6»

 в ответ на чей-то комментарий к записи «Короткие фантастические рассказы»

 в ответ на чей-то комментарий к записи «Совет молодому руководителю в IT»

 в ответ на чей-то комментарий к записи «Сертификат протух?»