给定一个只包含小写字母的有序数组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 是一个小写字母。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-smallest-letter-greater-than-target 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这道题是在二分查找的专栏里找到的,用二分的方法可以解决,就是个常规题目
但是发现普通的遍历更好解决这个问题,只需要一个循环和一个判断语句即可
二分代码:
class Solution { public char nextGreatestLetter(char[] letters, char target) { int left =0; int right = letters.length; while(left<right){ int mid = (left + right)>>>1; if (letters[mid] <= target){ left = mid+1; } else if (letters[mid] > target){ right = mid; } } return letters[left % letters.length]; } }遍历法代码:
class Solution { public char nextGreatestLetter(char[] letters, char target) { for (char c:letters){ if(c > target) return c; } return letters[0]; } }