这是悦乐书的第306次更新,第326篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第175题(顺位题号是744)。给定一个仅包含小写字母的有序字符数组,并给定目标字母目标,找到数组中大于给定目标字符的最小元素。例如,如果目标是target ='z'并且letters = ['a','b'],则答案是'a'。例如:

输入:letters = [“c”,“f”,“j”],target =“a”

输出:“c”

输入:letters = [“c”,“f”,“j”],target =“c”

输出:“f”

输入:letters = [“c”,“f”,“j”],target =“d”

输出:“f”

输入:letters = [“c”,“f”,“j”],target =“g”

输出:“j”

输入:letters = [“c”,“f”,“j”],target =“j”

输出:“c”

输入:letters = [“c”,“f”,“j”],target =“k”

输出:“c”



注意:

  • 数组的长度范围为[2,10000]。

  • 数组中的字母由小写字母组成,并包含至少2个唯一字母。

  • target是一个小写字母。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

根据题目的意思和给出的示例,如果数组中存在大于目标字母的最小元素,就返回该元素,不存在就返回数组第一个元素。因为数组是已经排过序的,可以直接使用循环来处理,从前往后依次比较,如果大于目标字母就返回当前元素,不存在就返回数组第一个元素。

public char nextGreatestLetter(char[] letters, char target) {
for (int i=0; i<letters.length; i++) {
if (letters[i] > target) {
return letters[i];
}
}
return letters[0];
}

03 第二种解法

我们也可以使用二分法来查找,定好起始点,每次取中间位置的元素来进行比对,如果中间位置元素大于目标字母,就将终点往左移到中间位置,反之要是中间位置元素小于等于目标字母,就将起点右移到中间位置的右一位。最后,如果起点已经移动到终点了,说明没有找到对应的元素,返回数组第一个元素即可,反之就返回起点所对应的元素。

public char nextGreatestLetter2(char[] letters, char target) {
int start = 0, end = letters.length;
while (start < end) {
int mid = (end+start)/2;
if (letters[mid] > target) {
end = mid;
} else {
start = mid+1;
}
}
return start == letters.length ? letters[0] : letters[start];
}

04 小结

算法专题目前已日更超过五个月,算法题文章175+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Find Smallest Letter Greater Than Target(Java实现)的更多相关文章

  1. LeetCode算法题-Convert BST to Greater Tree(Java实现)

    这是悦乐书的第255次更新,第268篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第122题(顺位题号是538).给定二进制搜索树(BST),将其转换为更大树,使原始BS ...

  2. 【LeetCode】744. Find Smallest Letter Greater Than Target 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 线性扫描 二分查找 日期 题目地址:https:// ...

  3. Python 解LeetCode:744. Find Smallest Letter Greater Than Target

    思路:二分法,时间复杂度o(logn) class Solution(object): def nextGreatestLetter(self, letters, target): "&qu ...

  4. Leetcode之二分法专题-744. 寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)

    Leetcode之二分法专题-744. 寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target) 给定一个只包含小写字母的有序数组letters  ...

  5. 【Leetcode_easy】744. Find Smallest Letter Greater Than Target

    problem 744. Find Smallest Letter Greater Than Target 题意:一堆有序的字母,然后又给了一个target字母,让求字母数组中第一个大于target的 ...

  6. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

  7. LeetCode算法题-Binary Number with Alternating Bits(Java实现)

    这是悦乐书的第292次更新,第310篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第160题(顺位题号是693).给定正整数,检查它是否具有交替位:即它的二进制数的任意两 ...

  8. LeetCode算法题-Trim a Binary Search Tree(Java实现)

    这是悦乐书的第284次更新,第301篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第152题(顺位题号是669).给定二叉搜索树以及L和R的最低和最高边界,修剪树以使其所 ...

  9. LeetCode算法题-Maximum Product of Three Numbers(Java实现)

    这是悦乐书的第275次更新,第291篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第143题(顺位题号是628).给定一个整数数组,从其中找出三个数,使得乘积最大.例如: ...

随机推荐

  1. Android底部导航栏(可滑动)----TabLayout+viewPager

    [TabLayout] ①TabLayout是选项卡,在屏幕空间有限的情况下,对不同的空间进行分组.属于android support design,更多的用于新闻上,如果放在底部也可做底部导航栏 ② ...

  2. Windows Server 2012 R2 安装密钥(只适用安装,不支持激活)

    标准版 = NB4WH-BBBYV-3MPPC-9RCMV-46XCB 数据中心版 = BH9T4-4N7CW-67J3M-64J36-WW98Y

  3. 探究 CSS 混合模式\滤镜导致 CSS 3D 失效问题

    今天在写一个小的 CSS Demo,一个关于 3d 球的旋转动画,关于 CSS 3D,少不了会使用下面这几个属性: { transform-style: preserve-3d; perspectiv ...

  4. vue.js window.removeEventListener 移除

    vue项目中的小坑记录下,想要移除window的addEventListener,需要把后面的function挂在到this上,removeEventListener 和 addEventListen ...

  5. springBoot(13)---整合Druid实现多数据源和可视化监控

    SpringBoot整合Druid实现多数据源和可视化监控 先献上github代码地址:https://github.com/yudiandemingzi/springboot-manydatasou ...

  6. Linux+.Net Core+Nginx(在Linux上使用Nginx反向代理.Net Core 项目)

    Linux+.Net Core+Nginx 之前的文章中有提到关于使用Nginx在linux来实现反向代理,今天我们继续加点料.在Centos7中部署.NetCore,然后使用Nginx进行反向代理! ...

  7. c#多线程总结(纯干货)

    线程基础 创建线程 static void Main(string[] args) { Thread t = new Thread(PrintNumbers); t.Start();//线程开始执行 ...

  8. 并发系列(3)之 CLH、MCS 队列锁简介

    这篇博客主要是作为 AbstractQueuedSynchronizer 的背景知识介绍:平时接触也非常的少,如果你不感兴趣可以跳过:但是了解一下能更加的清楚 AQS 的设计思路: 一.自旋锁简介 通 ...

  9. .NET(C#、VB)移动开发——Smobiler平台控件介绍:TextTabBar控件

    TextTabBar控件 一.          样式一 我们要实现上图中的效果,需要如下的操作: 从工具栏上的“Smobiler Components”拖动一个TextTabBar控件到窗体界面上 ...

  10. linq用法整理

    linq用法整理 普通查询 var highScores = from student in students where student.ExamScores[exam] > score se ...