главная Π½ΠΎΠ²ΠΎΠ΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

Бсылка Π½Π° Π·Π°Π΄Π°Ρ‡Ρƒ β€” 2379. Minimum Recolors to Get K Consecutive Black Blocks.

πŸ“Œ ОписаниС Π·Π°Π΄Π°Ρ‡ΠΈ

Π”Π°Π½Π° строка blocks, состоящая ΠΈΠ· символов 'W' (Π±Π΅Π»Ρ‹ΠΉ) ΠΈ 'B' (Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ).
НСобходимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ минимальноС число ΠΏΠ΅Ρ€Π΅ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠΉ Π±Π΅Π»Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Π² Ρ‡Ρ‘Ρ€Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· k подряд ΠΈΠ΄ΡƒΡ‰ΠΈΡ… Ρ‡Ρ‘Ρ€Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ².

πŸ’‘ ИдСя

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°:

πŸ“– Π”Π΅Ρ‚Π°Π»ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°

  1. ΠŸΠΎΡΡ‡ΠΈΡ‚Π°Π΅ΠΌ число Π±Π΅Π»Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠΊΠ½Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° k.
  2. Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ символ Π·Π° Ρ€Π°Π·:
    • Ссли символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Β«Π²Ρ…ΠΎΠ΄ΠΈΡ‚Β» Π² ΠΎΠΊΠ½ΠΎ, Π±Π΅Π»Ρ‹ΠΉ ('W'), ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ счётчик;
    • Ссли символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Β«Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚Β» ΠΈΠ· ΠΎΠΊΠ½Π°, Π±Π΅Π»Ρ‹ΠΉ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ счётчик.
  3. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сдвига ΠΎΠΊΠ½Π° обновляСм минимальноС Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
  4. Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ β€” это минимальноС число Π±Π΅Π»Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Π·Π° всё врСмя ΠΎΠ±Ρ…ΠΎΠ΄Π°.

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

πŸ› οΈ Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

impl Solution {
    pub fn minimum_recolors(blocks: String, k: i32) -> i32 {
        let blocks = blocks.as_bytes();
        let k = k as usize;

        // Count white blocks ('W') in the first window of size k
        let initial_recolors = blocks[..k].iter().filter(|&&b| b == b'W').count() as i32;

        // Slide window over the blocks using iterator methods
        blocks
            .windows(k+1)
            .fold((initial_recolors, initial_recolors), |(current, min), window| {
                // Update recolors based on outgoing and incoming blocks
                let next = current 
                    + (window.last() == Some(&b'W')) as i32 
                    - (window.first() == Some(&b'W')) as i32;

                (next, min.min(next))
            }).1
    }
}

Tags: #rust #algorithms #counting