decode 大于比较 小于_LeetCode基础算法题第142篇:找到数组中大于目标字母的最小字母...

e77e571f2437c4be7557edf5c2b50885.png

技术提高是一个循序渐进的过程,所以我讲的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 是一个小写字母;

示例:

66c2dd92e167ac3d1d44ef395842ae6f.png

C语言实现:

一看到"已排序"就开心了。

因为有序所以我们通过二分查找算法来实现。

根据二分查找算法的原理,我们定义三个变量left,right和mid,分别初始化为0,数组长度,数组长度的一半;临界条件我们定为 left

我们要找的是比target大一点的字母,所以当target大于等于数组中的当前元素时,说明我们要找的元素在当前元素的右边;否则就在当前元素的左边。

我们不断的缩小查找范围。当跳出循环时,会出现下面两种情况:

  1. 位于下标left处的元素大于targe,那么返回left处的元素。例如letters=[e,f,g], target = a;
  2. 位于下标left处的元素小于等于targe,那么返回left+1处的元素。例如letters=[e,f,g], target = e;

此外我们还要考虑一种特殊情况,即如果target大于等于letters中的最大元素,即最后一个元素,那么返回letters[0]。

所以最终的代码如下:

c63d0bc38dace465b1c9f5bff9b0e5b9.png
df54a2ba8c5ad6a5d372d8e2c3171f07.png

Java语言实现:

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

030fe86491b2236177841b30c444fff8.png
0ebe68d838fa7aca84cdf553ba0170c4.png

Python语言实现:

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

590ca2fde8759c67fab1bac355256862.png
3b878cd0f47c0c05edfb4f589dfacb91.png

谢谢大家一直以来的关注和支持!

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值