题目
1、题目描述
给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。
在比较时,字母是依序循环出现的。举个例子:
如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’
2、原题链接
解题报告
1、解题思路
可以直接枚举判断;
我选择用二分查找:
(1)循环条件:左右指针不重合。
(2)若当前字符小于等于
t
a
r
g
e
t
target
target 更新左指针:l = mid
(3)若当前字符大于
t
a
r
g
e
t
target
target 更新右指针:r= mid
(4)若 r = lettersSize
说明所有字符都小于等于
t
a
r
g
e
t
target
target 返回 letters[0]
否则返回 letters[r]
2、解题方法
2、代码详解
char nextGreatestLetter(char* letters, int lettersSize, char target){
int l, r, mid, tag;
l = -1;
r = lettersSize;
tag = target - 'a';
while(l + 1 < r){
mid = (r + l) >> 1;
if(letters[mid] - 'a' <= tag){
l = mid;
}else{
r = mid;
}
}
return r < lettersSize ? letters[r] : letters[0];
}
总结
简单题虽然简单但你可以练习其他方法啊,要是都用暴力枚举算法怎么巩固提高。