Skip to content

Latest commit

 

History

History
43 lines (39 loc) · 1.24 KB

744.find-smallest-letter-greater-than-target.md

File metadata and controls

43 lines (39 loc) · 1.24 KB

問題

https://leetcode.com/problems/find-smallest-letter-greater-than-target/

回答

初回の回答:

impl Solution {
    pub fn next_greatest_letter(letters: Vec<char>, target: char) -> char {
        let mut l = 0;
        let mut r = letters.len();
        while l < r {
            let m = l + (r - l) / 2;
            match target.cmp(&letters[m]) {
                std::cmp::Ordering::Equal => {
                    // find upper bound of the same letters
                    let mut l = m;
                    let mut r = letters.len();
                    while l < r {
                        let m = l + (r - l) / 2;
                        match target.cmp(&letters[m]) {
                            std::cmp::Ordering::Equal => l = m + 1,
                            _ => r = m,
                        }
                    }
                    if l == letters.len() {
                        return letters[0];
                    }
                    return letters[l];
                }
                std::cmp::Ordering::Less => r = m,
                std::cmp::Ordering::Greater => l = m + 1,
            }
        }
        if l == letters.len() {
            return letters[0];
        }
        letters[l]
    }
}