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

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

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


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

给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。

在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’。

示例1:

输入:

  • letters = [“c”, “f”, “j”]

  • target = “a”

输出: “c”

示例2:

输入:

  • letters = [“c”, “f”, “j”]

  • target = “c”

输出: “f”

示例3:

输入:

  • letters = [“c”, “f”, “j”]

  • target = “d”

输出: “f”

示例4:

输入:

  • letters = [“c”, “f”, “j”]

  • target = “g”

输出: “j”

示例5:

输入:

  • letters = [“c”, “f”, “j”]

  • target = “j”

输出: “c”

示例6:

输入:

  • letters = [“c”, “f”, “j”]

  • target = “k”

输出: “c”

提示:

  1. letters长度范围在[2, 10000]区间内。
  2. letters 仅由小写字母组成,最少包含两个不同的字母。
  3. 目标字母target 是一个小写字母。

方法:二分查找

思路:通过二分查找找到target的最小区间(最小区间最多包含两个数),右半区间数即为所求,右半区间数越界,则取字符数组中第一个字符为结果。

运行数据:执行用时:0 ms,内存消耗:39.9 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// LeetCode指定调用方法
public char nextGreatestLetter(char[] letters, char target) {

int len = letters.length;
int l = 0, h = len - 1;

while (l <= h) {
int mid = (l + h) / 2;
if (letters[mid] <= target) {
l = mid + 1;
} else {
h = mid - 1;
}
}

return l < len ? letters[l] : letters[0];
}

学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。

才疏学浅,若有错误或不当之处,可批评指正,还请见谅!


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×