Missing Number

Este problema consiste en dado un array de números de longitud n, que contiene elementos entre el rango (0,n), encontrar qué número falta

Solución

impl Solution {
    pub fn missing_number(nums: Vec<i32>) -> i32 {
        let mut sum = 0;
        let len = nums.len() as f32;
        for i in nums{
            sum+=i;
        }

        let total = ((len +1.0)/2.0) * len ;
        return (total as i32)-sum;
    }
}

Esta solución suma todos los números del arreglo, y conociendo la fórmula para sumar todos los elementos uno por uno hasta n es la siguiente:

$$ \sum_{i=0}^{N} i = \frac{N(N+1)}{2} $$

Entonces podemos restarle la suma obtenida a la suma conseguida y obtendríamos el resultado

En este ejemplo encontré que el loop

let mut sum = 0;
for i in nums{
  sum+=i;
}

es más rápido que la línea

let mut sum = nums.iter().sum::<i32>();

que pensé que sería igual o más rápida, supongo que en leetcode no se ejecuta con la opción –release, considero que es más lento pues cuando se ejecuta .iter, se itera sobre las referencias a los elementos, y se tiene el paso extra de dereferenciar la variable