Skip to content

Latest commit

 

History

History
70 lines (59 loc) · 1.71 KB

File metadata and controls

70 lines (59 loc) · 1.71 KB

744. 寻找比目标字母大的最小字母

给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。

数组里字母的顺序是循环的。举个例子,如果目标字母target = 'z' 并且有序数组为 letters = ['a', 'b'],则答案返回 'a'

示例:

输入:
letters = ["c", "f", "j"]
target = "a"
输出: "c"

输入:
letters = ["c", "f", "j"]
target = "c"
输出: "f"

输入:
letters = ["c", "f", "j"]
target = "d"
输出: "f"

输入:
letters = ["c", "f", "j"]
target = "g"
输出: "j"

输入:
letters = ["c", "f", "j"]
target = "j"
输出: "c"

输入:
letters = ["c", "f", "j"]
target = "k"
输出: "c"

注:

  1. letters长度范围在[2, 10000]区间内。
  2. letters 仅由小写字母组成,最少包含两个不同的字母。
  3. 目标字母target 是一个小写字母。

题解 (Rust)

1. 线性扫描

impl Solution {
    pub fn next_greatest_letter(letters: Vec<char>, target: char) -> char {
        for &ch in &letters {
            if ch > target {
                return ch;
            }
        }
        letters[0]
    }
}

2. 二分查找

impl Solution {
    pub fn next_greatest_letter(letters: Vec<char>, target: char) -> char {
        match letters.binary_search(&target) {
            Ok(i) => letters[(i + 1) % letters.len()],
            Err(i) => letters[i % letters.len()],
        }
    }
}