技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式> 聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
持续分享,敬请关注。
LeetCode 744. 找到大于目标的最小字母(Find Smallest Letter Greater Than Target)
问题描述:
给定一个已排序的仅包含一个个小写字母的列表letters,给定一个目标字母target,请在letters中找到大于target的最小字母。允许循环查找,
例如,如果目标target = 'z',letters = ['a', 'b'],答案是'a'。
注:
- letters的长度区间为[2, 10000];
- letters 由小写字母组成,并至少包含2个不同字母;
- target 是一个小写字母;
示例:
C语言实现:
一看到"已排序"就开心了。
因为有序所以我们通过二分查找算法来实现。
根据二分查找算法的原理,我们定义三个变量left,right和mid,分别初始化为0,数组长度,数组长度的一半;临界条件我们定为 left
我们要找的是比target大一点的字母,所以当target大于等于数组中的当前元素时,说明我们要找的元素在当前元素的右边;否则就在当前元素的左边。
我们不断的缩小查找范围。当跳出循环时,会出现下面两种情况:
- 位于下标left处的元素大于targe,那么返回left处的元素。例如letters=[e,f,g], target = a;
- 位于下标left处的元素小于等于targe,那么返回left+1处的元素。例如letters=[e,f,g], target = e;
此外我们还要考虑一种特殊情况,即如果target大于等于letters中的最大元素,即最后一个元素,那么返回letters[0]。
所以最终的代码如下:
Java语言实现:
Java 的实现和C语言的实现一致,不再撰述。代码如下:
Python语言实现:
Python 的实现和C语言的实现一致,不再撰述。代码如下:
谢谢大家一直以来的关注和支持!
我一直在努力的写好每一篇文章,画好每一份插图。但是作为一个996从业人员,时间精力十分有限。所以针对评论部分,以后只回答粉丝的问题和私信。希望仅仅是路过的朋友能够体谅,希望更多人关注《吾是我师》,谢谢!