744. 寻找比目标字母大的最小字母『简单』

题目来源于力扣(LeetCode

一、题目

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

题目相关标签:二分查找

提示:

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

二、解题思路

  1. 据题目可知:letters 数组中的元素是依序出现的(即升序排列)

  2. 遍历数组,将当前遍历的元素与 target 做减法操作,当差大于 0 时说明当前遍历元素比 target 大

  3. 又因为数组是有序的,且是从小到大,那么一旦遍历的元素与 target 的差大于 0 时,该元素即大于目标字母的最小字母

  4. 遍历完数组后仍然没有与 target 相减大于 1 的元素,即 letters 数组中的元素都小于等于 target

  5. 据题目提示:letters 中的字母是循环出现的,那么 letters 数组的第一个元素即是大于目标字母的最小字母

三、代码实现

public static char nextGreatestLetter(char[] letters, char target) {
    for (char i : letters) {
        // 必须是两字符的差大于零,等于零时说明两字符相等,不计算
        if (i - target > 0) {
            return i;
        }
    }
    // 遍历完数组未找到比 target 大的字符时,返回数组首位元素
    return letters[0];
}

四、执行用时

五、部分测试用例

public static void main(String[] args) {
    char[] letters = {'c', 'f', 'j'};
    char target = 'a';  // output:'c'
    
//    char[] letters = {'c', 'f', 'j'};
//    char target = 'c';  // output:'f'
    
//    char[] letters = {'c', 'f', 'j'};
//    char target = 'd';  // output:'f'
    
//    char[] letters = {'c', 'f', 'j'};
//    char target = 'g';  // output:'j'
    
//    char[] letters = {'c', 'f', 'j'};
//    char target = 'j';  // output:'c'
    
//    char[] letters = {'c', 'f', 'j'};
//    char target = 'k';  // output:'c'
    char result = nextGreatestLetter(letters, target);

    System.out.println(result);
}
posted @ 2020-05-15 22:07  知音12138  阅读(196)  评论(0编辑  收藏  举报