Given a list of sorted characters letters
containing only lowercase letters, and given a target letter target
, find the smallest element in the list that is larger than the given target.
Letters also wrap around. For example, if the target is target = 'z'
and letters = ['a', 'b']
, the answer is 'a'
.
Examples:
Input: letters = ["c", "f", "j"] target = "a" Output: "c" Input: letters = ["c", "f", "j"] target = "c" Output: "f" Input: letters = ["c", "f", "j"] target = "d" Output: "f" Input: letters = ["c", "f", "j"] target = "g" Output: "j" Input: letters = ["c", "f", "j"] target = "j" Output: "c" Input: letters = ["c", "f", "j"] target = "k" Output: "c"
找到数组里边的大于目标的最小值
思路如下,用二分查找找到目标即可,如果找不到则返回数组的第一位
public char nextGreatestLetter(char[] letters, char target) { int lo = 0, hi = letters.length; while (lo < hi) { int mi = lo + (hi - lo) / 2; if (letters[mi] <= target) lo = mi + 1; else hi = mi; } return letters[lo % letters.length]; }
取mod是因为如果找不到lo最后会变成hi即letters.length
这种情况下还是返回第一个