给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。
在比较时,字母是依序循环出现的。举个例子:
如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’
示例 1:
输入: letters = [“c”, “f”, “j”],target = “a”
输出: “c”
示例 2:
输入: letters = [“c”,“f”,“j”], target = “c”
输出: “f”
示例 3:
输入: letters = [“c”,“f”,“j”], target = “d”
输出: “f”
一、循环
/**
* @param {character[]} letters
* @param {character} target
* @return {character}
*/
var nextGreatestLetter = function(letters, target) {
let nextGreater = letters[0],len = letters.length
for(let a = 0; a < len; a++) {
if(letters[a] > target){
nextGreater = letters[a]
break
}
}
return nextGreater
};
二、二分查找
/**
* @param {character[]} letters
* @param {character} target
* @return {character}
*/
var nextGreatestLetter = function(letters, target) {
if(letters[letters.length-1] <= target){
return letters[0]
}
let left = 0,right = letters.length - 1
while(left < right){
let mid = Math.floor((right - left) / 2) + left
if(letters[mid] > target){
right = mid
}else{
left = mid + 1
}
}
return letters[left]
};