H-Index II

Este problema consiste en encontrar el índice H de un investigador, donde las citas ya vienen ordenadas de forma ascendente. El índice H es el número máximo h tal que el investigador tiene al menos h publicaciones con al menos h citas cada una.

Solución

impl Solution {
    pub fn h_index(citations: Vec<i32>) -> i32 {
        let mut right = citations.len() as i32;
        let mut left = 0;
        while left < right{
            let mid = (right+left +1)/2;
            let value = citations[(citations.len()-mid as usize)];
            if value >= mid{
                left = mid;
            }else{
                right = mid-1;
            }
        }
        left
    }
}

La solución usa búsqueda binaria sobre la respuesta h. La clave es que al estar el array ordenado, basta con verificar la publicación en la posición len - mid: si tiene al menos mid citas, entonces todas las publicaciones a su derecha también las tienen, por lo que mid es válido y buscamos uno mayor (left = mid). Si no, reducimos el rango superior (right = mid - 1).