LeetCode二分查找:寻找比目标字母大的最小字母
题目描述
给你一个字符数组 letters
,该数组按非递减顺序排序,以及一个字符 target
。letters
里至少有两个不同的字符。
返回 letters
中大于 target
的最小的字符。如果不存在这样的字符,则返回 letters
的第一个字符。
示例 1:
输入: letters = ["c", "f", "j"],target = "a"
输出: "c"
解释:letters 中字典上比 'a' 大的最小字符是 'c'。
示例 2:
输入: letters = ["c","f","j"], target = "c"
输出: "f"
解释:letters 中字典顺序上大于 'c' 的最小字符是 'f'。
示例 3:
输入: letters = ["x","x","y","y"], target = "z"
输出: "x"
解释:letters 中没有一个字符在字典上大于 'z',所以我们返回 letters[0]。
解题思路
今天的二分查找挺简单的,代码一口气写完直接通过了
也可以考虑直接顺序遍历,不过这种与本练习偏移不再赘述。
注意到他是一个非递减的排序,那么就可以考虑使用二分查找,至于找到比他大的,那只需要返回跳出while循环时右边的那一个就可以;
代码
public class BinSearch2 {public char nextGreatestLetter(char[] letters, char target) {int j=letters.length-1;if (letters[j]<=target)return letters[0];int i=0;while (i<=j){int mid=i+(j-i)/2;if (letters[mid]>target){j=mid-1;}else {i=mid+1;}}return letters[i];}public static void main(String[] args) {BinSearch2 b=new BinSearch2();System.out.println(b.nextGreatestLetter(new char[]{'c', 'f', 'j'}, 'a'));}
}