
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式> 聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
持续分享,敬请关注。
LeetCode 744. 找到大于目标的最小字母(Find Smallest Letter Greater Than Target)
给定一个已排序的仅包含一个个小写字母的列表letters,给定一个目标字母target,请在letters中找到大于target的最小字母。允许循环查找,
例如,如果目标target = 'z',letters = ['a', 'b'],答案是'a'。
注:

一看到"已排序"就开心了。
因为有序所以我们通过二分查找算法来实现。
根据二分查找算法的原理,我们定义三个变量left,right和mid,分别初始化为0,数组长度,数组长度的一半;临界条件我们定为 left<right。
我们要找的是比target大一点的字母,所以当target大于等于数组中的当前元素时,说明我们要找的元素在当前元素的右边;否则就在当前元素的左边。
我们不断的缩小查找范围。当跳出循环时,会出现下面两种情况:
此外我们还要考虑一种特殊情况,即如果target大于等于letters中的最大元素,即最后一个元素,那么返回letters[0]。
所以最终的代码如下:


Java 的实现和C语言的实现一致,不再撰述。代码如下:


Python 的实现和C语言的实现一致,不再撰述。代码如下:


谢谢大家一直以来的关注和支持!
我一直在努力的写好每一篇文章,画好每一份插图。但是作为一个996从业人员,时间精力十分有限。所以针对评论部分,以后只回答粉丝的问题和私信。希望仅仅是路过的朋友能够体谅,希望更多人关注《吾是我师》,谢谢!
| 留言与评论(共有 0 条评论) |