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

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

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

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

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

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

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

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

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