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

题目描述

原题
给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。
在比较时,字母是依序循环出现的。举个例子:
    如果目标字母 target = 'z' 并且字符列表为 letters = ['a', 'b'],则答案返回 'a'
示例:
1
输入:
2
letters = ["c", "f", "j"]
3
target = "a"
4
输出: "c"
5
6
输入:
7
letters = ["c", "f", "j"]
8
target = "c"
9
输出: "f"
10
11
输入:
12
letters = ["c", "f", "j"]
13
target = "d"
14
输出: "f"
15
16
输入:
17
letters = ["c", "f", "j"]
18
target = "g"
19
输出: "j"
20
21
输入:
22
letters = ["c", "f", "j"]
23
target = "j"
24
输出: "c"
25
26
输入:
27
letters = ["c", "f", "j"]
28
target = "k"
29
输出: "c"
Copied!
提示:
    1.
    letters长度范围在[2, 10000]区间内。
    2.
    letters 仅由小写字母组成,最少包含两个不同的字母。
    3.
    目标字母target 是一个小写字母。

题解

1
class Solution {
2
public char nextGreatestLetter(char[] letters, char target) {
3
int low = 0 , high = letters.length - 1;
4
if(letters[low] > target || letters[high] < target)
5
return letters[low];
6
while(low <= high){
7
int middle = (low + high) >>> 1;
8
if(letters[middle] > target)
9
high = middle -1;
10
else if(letters[middle] < target)
11
low = middle + 1;
12
else{
13
while(letters[(middle + 1) % letters.length]==target){
14
middle ++;
15
}
16
return letters[(middle +1) % letters.length];
17
}
18
}
19
return letters[low];
20
}
21
}
Copied!
最近更新 10mo ago
复制链接