744. 寻找比目标字母大的最小字母

news2024/10/6 10:29:31

给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。

返回 letters 中大于 target 的最小的字符。如果不存在这样的字符,则返回 letters 的第一个字符。

示例 1:

输入: letters = ["c", "f", "j"],target = "a"
输出: "c"
解释:letters 中字典上比 'a' 大的最小字符是 'c'。
示例 2:

输入: letters = ["c","f","j"], target = "c"
输出: "f"
解释:letters 中字典顺序上大于 'c' 的最小字符是 'f'。
示例 3:

输入: letters = ["x","x","y","y"], target = "z"
输出: "x"
解释:letters 中没有一个字符在字典上大于 'z',所以我们返回 letters[0]。
 

提示:

2 <= letters.length <= 104
letters[i] 是一个小写字母
letters 按非递减顺序排序
letters 最少包含两个不同的字母
target 是一个小写字母

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-smallest-letter-greater-than-target
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:二分查找

由于题目给的是有序数列,那么自然可以直接使用二分查找来找到目标字符。需要注意的就是循环结束的判断,因为字母是可能有重复的,而且我们要找的是大于当前字符的最小字符,如果当前字母小于等于目标字符,说明刚好大于目标字符的最小字符一定在 [mid+1~h] 中,所以要修改l为mid+1。

代码如下:

class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        if (letters[letters.length - 1] <= target) {
            return letters[0];
        }
        int l = 0;
        int h = letters.length - 1;
        while (l <= h) {
            int mid = l + (h - l) / 2;
            if ((int) target < (int) letters[mid]) {
                h = mid - 1;
            } else {
                l = mid + 1;
            }
        }
        return letters[l];
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. VBA术语

在本章中&#xff0c;将介绍常用的Excel VBA术语。这些术语将在很多的模块中使用&#xff0c;因此理解其中的每一个术语都很重要。 3.1 模块 模块是编写代码的区域。如下图中&#xff0c;这是一个新的工作簿&#xff0c;因此没有任何模块。 要插入模块&#xff0c;请导航到插…

Cell--瘤内微生物将开辟新疗法

2023年4月13日&#xff0c;弗雷德哈钦森癌症中心的微生物学家Susan Bullman教授在《Cell》杂志发表了关于肿瘤内微生物群的评论。 微生物群是肿瘤微环境的一个组成部分 在患者的肿瘤内部&#xff0c;恶性细胞处在一个复杂的生态系统中&#xff0c;周围是正常细胞的网络&#xf…

socks5与http代理如何转化?stormproxies怎么解决?

Socks5和HTTP代理之间可以通过一些工具或软件进行转化&#xff0c;具体的方法如下&#xff1a; 使用ProxyCap&#xff1a;ProxyCap是一款常用的代理工具&#xff0c;可以将Socks5代理转化为HTTP代理。在ProxyCap中设置Socks5代理的服务器地址和端口&#xff0c;然后在本地设置H…

Java应用高性能的方法和思路

Java应用高性能的方法和思路 目录概述需求&#xff1a; 设计思路实现思路分析 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge …

软件测试基础概念

1.软件测试的生命周期 需求分析-》测试计划-》测试设计-》测试开发-》测试执行-》测试评估 需求分析&#xff1a;分析需求是否合理和正确 计划:确定软件由谁测试&#xff1f; 什么时候开始测试&#xff0c;什么时候结束测试 测试那些模块 测试设计和测试开发阶段&#xff1a;…

4.19~20(总结)

项目越到后面&#xff0c;推进越难&#xff0c;已经到了发送消息这里了&#xff0c;这个做完&#xff0c;基本上也就完成得七七八八了&#xff0c;后面只需要优化了&#xff0c;但是现在卡在这里就还是有点难搞。 首先&#xff0c;我的界面已经成这样了。 我的打算是这样可以搜…

C++基础知识-2

本期我们接着来讲C的基础知识&#xff0c;没有看过的朋友可以先看看上一期 (16条消息) C基础知识-----命名空间_KLZUQ的博客-CSDN博客 目录 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字&#xff08;C11&#xff09; 9. 基于范围的for循环(C11) 10.指针空值nul…

算法记录 | Day37 贪心算法

738.单调递增的数字 思路&#xff1a; 1.一旦出现strNum[i - 1] > strNum[i]的情况&#xff08;非单调递增&#xff09;&#xff0c;首先想让strNum[i - 1]–&#xff0c;然后strNum[i]给为9&#xff0c;这样这个整数就是89&#xff0c;即小于98的最大的单调递增整数。 2…

初始VUE

目录 什么是vue vue的特点 前置js基础知识 vue2 安装vue devtools 搭建开发环境 Vue对象的el及data写法 el的处理 data的处理 特点 什么是js表达式&#xff0c;js代码&#xff08;语句&#xff09; vue脚手架&#xff08;vue cli&#xff09; 使用说明 具体步骤 …

瑞吉外卖:软件开发基础和项目介绍

文章目录 软件开发基础软件开发流程角色分工软件环境 瑞吉外卖项目介绍项目介绍开发流程技术选型功能架构角色 软件开发基础 软件开发流程 需求分析&#xff1a;产品原型&#xff08;大体结构、页面、功能等&#xff09;和需求规格说明书设计&#xff1a;产品文档、UI界面设计…

计算机组成原理——第五章中央处理器(上)

半生风雨半生伤&#xff0c;半醉半醒半心凉 文章目录 前言5.1 CPU的功能和基本结构5.2 指令周期的数据流5.3.1 单总线结构5.3.2 专用通路结构 前言 之前我们就说过CPU主要包括两个部分&#xff0c;运算器和控制器&#xff0c;运算器主要是实现算数运算.逻辑运算&#xff0c; 运…

python正则表达式与re模块

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 python正则表达式与re模块 正则表达式元字符① . 通配符② ^③ $④ *⑤ ⑥ ?⑦ {}⑧ []⑨ \ 转义符⑩…

python 怎么使用pip进行包管理

包管理工具是用来对一些应用程序的包进行管理的工具&#xff0c;比如nodejs使用npm&#xff0c;yarn来进行包管理&#xff0c;linux使用apt来进行包管理。python包管理工具或许不如他们有名&#xff08;实际上pip的大名比前几位更响亮&#xff09;&#xff0c;但绝对比他们好用…

java超市会员积分管理系统

本课题要求采用B/S结构和主流的jsp技术&#xff0c;以java为开发语言&#xff0c;结合后台数据库mysql&#xff0c;并配合使用了MyEclipse等工具软件&#xff0c;完成超市会员管理系统的设计与后台管理功能开发。 该系统主要功能如下&#xff1a; 会员信息的管理&#xff1a;包…

MySQL数据库:数据库表的设计

一、ER实体关系图 1.概念 百度百科&#xff1a; ER图是用来描述某一组织(单位)的概念模型&#xff0c;提供了表示实体、属性和联系的方法。构成ER图的基本要素是实体、属性和关系。 ER图是用来描述某一组织(单位)的概念模型&#xff0c;提供了表示实体、属性和联系的方法。构…

asp.net房屋租赁管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net房屋租赁管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net房屋租赁管理系统VS开发s…

如何搭建用户生命周期模型

如何搭建用户生命周期模型 摘要一、问题背景二、用户生命周期模型1、用户生命周期模型简介2、对用户生命周期认知的几点误区 三、如何搭建并应用用户生命周期模型1、使用场景2、搭建步骤&#xff08;1&#xff09;梳理用户成长路径&#xff08;2&#xff09;寻找驱动用户进入下…

【动力节点】springsecurity课程笔记6-13章

** 6 密码处理 6.1 为什么要加密&#xff1f; csdn 密码泄露事件 泄露事件经过&#xff1a;https://www.williamlong.info/archives/2933.html 泄露数据分析&#xff1a;https://blog.csdn.net/crazyhacking/article/details/10443849 6.2加密方案 密码加密一般使用散列函…

ATTCK v12版本战术实战研究——提权(二)

一、前言 前几期文章中&#xff0c;我们介绍ATT&CK 14项战术中提权战术&#xff08;二&#xff09;&#xff0c;包括提权前7项子技术。那么从前文中介绍的相关提权技术来开展测试&#xff0c;进行更深一步的分析。本文主要内容是介绍攻击者在运用提权技术时&#xff0c;在…

ZLMediaKit实现按需拉流时rtsp流地址不对addStreamProxy返回0,接口流id参数踩坑记录

场景 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放: 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放_霸道流氓气质的博客-CSDN博客 基于上面实现拉取视…