LeetCode刷题记录(四):寻找比目标字母大的最小字母

104 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

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

题目如下图所示,也可以在LeetCode题目中找到此题。

image.png

题目解析

具体的代码如下,是使用二分法来判断的。

题目提供素材:

  1. 一个只有小写英文字母的正序列表,数据类型为char[],比如['a', 'c', 'f', 'g']。

2. 一个目标字母target,并且保证target字母一定是小写字母

题目预期结果:

找出在正序列表里比目标字母大的最小字母。

比如在正序列表 ["c", "f", "j"] ,目标字母为a时,预期结果为: "c"。

我的解决过程

具体的代码如下,是使用二分法来判断的。 

要得出这种结果,除了循环遍历比较,好像没什么好的办法。

既然无法避开循环,那么为了写出更好的代码,就要考虑如何能减少循环的次数。

在一个有序列表中,如何快速得到一个有效值呢?这里我们就要说一下二分法

什么是二分法?

二分法是数学中的一种算法,大学课程基本都有讲到,今天只是快速的说一下使用十行的数据流转。

从名称来看,二分法就是一分为二,其实就是不断缩小结果集的区间。找了一张流程图也可以参考一下。

图片****

开始编写具体的代码如下,是使用二分法来判断的。

class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        int length = letters.length;
        if (target >= letters[length - 1]) {
            return letters[0];
        }
        int start = 0, end = length - 1;
        while (start < end) {
            int zhong = (end - start) / 2 + start;
            if (letters[zhong] > target) {
                end = zhong;
            } else {
                start = zhong + 1;
            }
        }
        return letters[start];
    }
}

执行结果

大家一起刷,才更有意思。 所以,你今天刷题打卡了吗?

图片