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

难度系数: 简单

给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。
在比较时,字母是依序循环出现的。举个例子:

  • 如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’

示例 1:

1
2
输入: letters = ['c', 'f', 'j'],target = 'a'
输出: 'c'

示例 2:

1
2
输入: letters = ['c', 'f', 'j'], target = 'c'
输出: 'f'

示例 3:

1
2
输入: letters = ['c', 'f', 'j'], target = 'd'
输出: 'f'

约束条件

  • 2 <= letters.length <= 10410^4
  • letters[i] 是一个小写字母
  • letters 按非递减顺序排序
  • letters 最少包含两个不同的字母
  • target 是一个小写字母

解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
int length = letters.length;
if (letters[length - 1] <= target) {
return letters[0];
}
int left = 0;
int right = length - 1;
int middle;
while (left < right) {
middle = left + (right - left) / 2;
if (letters[middle] > target) {
right = middle;
} else {
left = middle + 1;
}
}
return letters[left];
}
}

原题链接:https://leetcode.cn/problems/find-smallest-letter-greater-than-target/