Skip to content

Patrones Rust para Entrevista

Joel Alvarez edited this page Jul 12, 2026 · 10 revisions

Patrones de Rust para Entrevista

HashMap para Conteos

let mut counts = std::collections::HashMap::new();

for value in values {
    *counts.entry(value).or_insert(0) += 1;
}

Aplicaciones:

  • Anagramas.
  • Top K frecuente.
  • Conteo de caracteres o números.

HashMap para Complementos

let mut seen = std::collections::HashMap::new();

for (index, value) in nums.into_iter().enumerate() {
    let complement = target - value;

    if let Some(&previous_index) = seen.get(&complement) {
        return Some((previous_index, index));
    }

    seen.insert(value, index);
}

Aplicaciones:

  • Two Sum.
  • Pares con target.
  • Detección de relaciones valor-índice.

HashSet para Pertenencia

let values: std::collections::HashSet<i32> = nums.into_iter().collect();

for &value in &values {
    if values.contains(&(value - 1)) {
        continue;
    }
}

Aplicaciones:

  • Duplicados.
  • Secuencias consecutivas.
  • Visitados en grafos.

Suma de Prefijos con HashMap

let mut prefix_counts = std::collections::HashMap::from([(0, 1)]);
let mut prefix_sum = 0;
let mut matches = 0;

for value in nums {
    prefix_sum += value;
    let needed_prefix = prefix_sum - target;

    if let Some(count) = prefix_counts.get(&needed_prefix) {
        matches += count;
    }

    *prefix_counts.entry(prefix_sum).or_insert(0) += 1;
}

Aplicaciones:

  • Contar subarreglos contiguos con una suma objetivo.
  • Detectar rangos con suma específica.
  • Trabajar con números negativos cuando sliding window ya no aplica.

Option para Resultados Ausentes

pub fn find_value(nums: Vec<i32>, target: i32) -> Option<usize> {
    for (index, value) in nums.into_iter().enumerate() {
        if value == target {
            return Some(index);
        }
    }

    None
}

Usar Option cuando una respuesta puede no existir. Es más idiomático que devolver -1.

Tests Estables con HashMap

Los mapas no garantizan orden de iteración. Si una función regresa grupos, ordenar antes de comparar:

for group in &mut result {
    group.sort();
}
result.sort();

Clone this wiki locally