# 寻找比目标字母大的最小字母

# 一、题目

给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。

在比较时,字母是依序循环出现的。举个例子:

如果目标字母 target = 'z' 并且字符列表为 letters = ['a', 'b'],则答案返回 'a'

示例:

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

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

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

# 二、题解

/**
 * @param {character[]} letters
 * @param {character} target
 * @return {character}
 */
var nextGreatestLetter = function(letters, target) {
    let left = 0;
    let right = letters.length - 1;
    if (letters[right] <= target) {
        return letters[0];
    }
    while (left < right) {
        // 因为right = mid,所以查找条件要去掉相等
        const mid = left + ((right - left) >> 1);
        if (letters[mid] <= target) {
            left = mid + 1; // 如果中间值小或等于,那么它不是我们的目标
        } else {
            right = mid; // 如果中间值大于目标值,我们要保留它,排除右边剩余部分ƒ
        }
    }
    return letters[left];
};

# 三、写在最后

本文是附加题,可能仅仅借助了二分思想中的一部分,加油!

如果对你有所帮助不妨给本项目的github 点个 star (opens new window),这是对我最大的鼓励

关于我

  • 花名:余光
  • WX:j565017805
  • 沉迷 JS,水平有限,虚心学习中

其他沉淀

Last Updated: 8/6/2021, 6:58:15 PM