744.寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)
16lz
2021-01-22
题目描述
给定一个只包含小写字母的有序数组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
是一个小写字母。
解题思路
做法,和二分查找的思路差不多;
public char nextGreatestLetter(char[] letters, char target) { int n = letters.length; int l = 0, h = n - 1; while (l <= h) { int m = l + (h - l) / 2; if (letters[m] <= target) l = m + 1; else h = m - 1; } return l < n ? letters[l] : letters[0]; //最后返回的是 l 位置的字符 }
更多相关文章
- java中 16进制字符串 与普通字符串 与 byte数组 之间的转化
- Java数组的运用
- Java,从数组中查找Kth最大值[重复]
- 理顺 JavaScript (12) - 一个比较实用的数组用法
- Java区分大小写字母数字和符号
- java 正则表达式查找某段字符串中所有小写字母开头的单词并统计
- 如何在泽西Rest Webservice中接受json数组输入
- java数组的拷贝四种方法:for、clone、System.arraycopy、arrays.c
- 给定一个整数数组,找出两个下标,要求后面下标所指的数减去前面下标