- 尋找比目標字母大的最小字母
給你一個排序後的字符列表 letters ,列表中只包含小寫英文字母。另給出一個目標字母 target,請你尋找在這一有序列表裏比目標字母大的最小字母。
在比較時,字母是依序循環出現的。舉個例子:
如果目標字母 target = 'z' 並且字符列表爲 letters = ['a', 'b'],則答案返回 'a'
示例:
輸入:
letters = ["c", "f", "j"]
target = "a"
輸出: "c"
輸入:
letters = ["c", "f", "j"]
target = "c"
輸出: "f"
輸入:
letters = ["c", "f", "j"]
target = "d"
輸出: "f"
輸入:
letters = ["c", "f", "j"]
target = "g"
輸出: "j"
輸入:
letters = ["c", "f", "j"]
target = "j"
輸出: "c"
輸入:
letters = ["c", "f", "j"]
target = "k"
輸出: "c"
提示:
letters長度範圍在[2, 10000]區間內。
letters 僅由小寫字母組成,最少包含兩個不同的字母。
目標字母target 是一個小寫字母。
貼一篇優雅的解答:
class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
int len = letters.size();
int l = 0;
int r = len - 1;
while (l <= r)
{
int mid = l + (r - l) / 2;
if (target < letters[mid])
r = mid - 1;
else
l = mid + 1;
}
return letters[l % len];
}
};