寻找比目标字母大的最小字母
一、题目
给你一个排序后的字符列表 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,这是对我最大的鼓励
关于我
- 花名:余光
- WX:j565017805
- 沉迷 JS,水平有限,虚心学习中
其他沉淀