744. 寻找比目标字母大的最小字母『简单』
题目来源于力扣(LeetCode)
一、题目
题目相关标签:二分查找
提示:
letters
长度范围在[2, 10000]
区间内。letters
仅由小写字母组成,最少包含两个不同的字母。- 目标字母
target
是一个小写字母。
二、解题思路
-
据题目可知:letters 数组中的元素是依序出现的(即升序排列)
-
遍历数组,将当前遍历的元素与 target 做减法操作,当差大于 0 时说明当前遍历元素比 target 大
-
又因为数组是有序的,且是从小到大,那么一旦遍历的元素与 target 的差大于 0 时,该元素即大于目标字母的最小字母
-
遍历完数组后仍然没有与 target 相减大于 1 的元素,即 letters 数组中的元素都小于等于 target
-
据题目提示:letters 中的字母是循环出现的,那么 letters 数组的第一个元素即是大于目标字母的最小字母
三、代码实现
public static char nextGreatestLetter(char[] letters, char target) {
for (char i : letters) {
// 必须是两字符的差大于零,等于零时说明两字符相等,不计算
if (i - target > 0) {
return i;
}
}
// 遍历完数组未找到比 target 大的字符时,返回数组首位元素
return letters[0];
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
char[] letters = {'c', 'f', 'j'};
char target = 'a'; // output:'c'
// char[] letters = {'c', 'f', 'j'};
// char target = 'c'; // output:'f'
// char[] letters = {'c', 'f', 'j'};
// char target = 'd'; // output:'f'
// char[] letters = {'c', 'f', 'j'};
// char target = 'g'; // output:'j'
// char[] letters = {'c', 'f', 'j'};
// char target = 'j'; // output:'c'
// char[] letters = {'c', 'f', 'j'};
// char target = 'k'; // output:'c'
char result = nextGreatestLetter(letters, target);
System.out.println(result);
}