一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
寻找比目标字母大的最小字母
题目如下图所示,也可以在LeetCode题目中找到此题。
题目解析
具体的代码如下,是使用二分法来判断的。
题目提供素材:
- 一个只有小写英文字母的正序列表,数据类型为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];
}
}
执行结果
大家一起刷,才更有意思。 所以,你今天刷题打卡了吗?