【每日一题】744. 寻找比目标字母大的最小字母

news2024/11/19 3:19:06

744. 寻找比目标字母大的最小字母 - 力扣(LeetCode)

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

返回 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 是一个小写字母
class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        int len = letters.length - 1;
        int right = len;
        int left = 0;
        int mid = 0;
        while(left < right) {
            mid = (left+right) / 2;
            if(letters[mid] <= target) {
                left = mid;
            } else {
                right = mid;
            }
            if(right - left == 1) {
                if(letters[left] < target) {
                    if(letters[right] > target) return letters[right];           else return letters[0];
                } else if(letters[left] == target) {
                    if(left+1 <= len && letters[right] > target) return letters[left+1];
                    else  return letters[0];
                } else {
                    return letters[left];
                }
                
            }
        }
     return letters[mid];
    }
}

         每日一题,今天是简单题。虽然说是简单题却有可能比昨天的中等题更费时间。

        今天这道题主要就是二分法的使用。二分法相信大家都很熟悉。left,right,mid用得非常娴熟。但是大家经常写的版本,有时候可能通不过。原因就在于每道题需要考虑的边界问题不一样。当出现题目很明显需要你写二分算法的时候,就要很小心了,因为一般这种题都是需要处理一大堆的边界问题。比如这道题,就是很好的练习边界的题目。

        博主经常写的版本就是代码中的版本,left为0,right为数组长度-1,判断完之后left=mid,right=mid的写法(也有left = mid+1,right=mid-1的写法,这不重要,处理好边界,能通过就是好算法。)。博主这种写法很容易遇到left=0,right=1的时候,一直让left = mid =0,前进不了。这道题就会遇到,所以需要提前对边界问题处理,首先,正常的二分肯定都可以走到,博主的写法有可能出现的问题就在于left和right差1的时候:

        (1)这时候,如果left = 0 right = 1,就会mid = 0,如果一直小于,就会出现left=mid=0前进不了的情况。就要单独拿出来判断

        (2)如果是等于的状态,根据题目的说法,要么就往前一位,要么就没有返回数组首位,但往前一位right的值有可能也和left一样,所以需要单独判断。

        (3)就是大于的情况了,由于相差1,如果left位置都大于,那么right位置只有可能大于等于,直接返回就行了。

        边界问题一直是二分的难点之一,虽然二分算法不算难,但也要根据题目判断好相应的边界,大家可以用这道题练练。

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

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

相关文章

【C++】基础知识点回顾 下:auto关键字、范围内的for循环

前言 前两篇文章&#xff0c;我们分别复习了这些知识点 命名空间与输入输出 函数重载、引用和内联函数 今天&#xff0c;我们来学习auto关键字、范围内的for循环 auto关键字 定义 C11中&#xff0c;标准委员会赋予了auto全新的含义即&#xff1a;auto不再是一个存储类型指…

中断子系统 -- 中断通用框架

目录 通用数据结构 中断注册 中断线程化 中断处理 获取hwirq号 irq_enter preempt_count generic_handle_irq irq_exit 通用数据结构 内核提供了两种中断描述符组织形式&#xff1a; 打开CONFIG_SPARSE_IRQ宏&#xff08;中断编号不连续&#xff09;&#xff0c;中断描…

android h5 共享停车系统myeclipse开发mysql数据库编程服务端java计算机程序设计

一、源码特点 java android h5 共享停车系统APP是一套完善的WEBandroid设计系统&#xff0c;对理解JSP java&#xff0c;安卓app编程开发语言有帮助&#xff08;系统采用web服务端APP端 综合模式进行设计开发&#xff09;&#xff0c;系统具有 完整的源代码和数据库&#xf…

MySQL架构介绍与说明

1、MySQL架构介绍 和其它数据库相比&#xff0c;MySQL有点与众不同&#xff0c;它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上&#xff0c; 插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的…

机器学习 day33(误差分析、添加数据)

误差分析 我们可以手动查看分类错误的子集样本&#xff08;通常为100个&#xff09;&#xff0c;并统计他们的错误类型在所有错误类型中&#xff0c;选择一种或几种最常见的错误&#xff0c;进行改进。这可以最高效的改进你的模型误差分析的一个限制是&#xff1a;它只能很好…

基于Python+tkinter实现一个简易计算器桌面软件

你是否想过自己能够开发一个桌面小工具&#xff1f;如果答案是“是”&#xff0c;那么你来对地方了&#xff01;今天&#xff0c;我们要一起使用Python中的tkinter库&#xff0c;来创建一个简易的桌面计算器。 1. 为什么选择tkinter&#xff1f; tkinter是Python的标准GUI库。…

Tokenview X-ray功能:深入探索EVM系列浏览器的全新视角

Tokenview作为一家领先的多链区块浏览器&#xff0c;为了进一步优化区块链用户的使用体验&#xff0c;我们推出了X-ray&#xff08;余额透视&#xff09;功能。该功能将帮助您深入了解EVM系列浏览器上每个地址的交易过程&#xff0c;以一种直观、简洁的方式呈现地址的进出账情况…

基于注解和jwt实现权限管理

第一步&#xff1a;创建项目 添加Maven依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version> </dependency> <dependency><groupId>org.s…

2023 Google 开发者大会|Mobile开发专题追踪

文章目录 前言大会介绍涉及内容MobileWebAICloud Mobile开发专题多终端应用的开发适配大屏视频流可穿戴设备电视新的设计中心 构建高质量的应用高级相机和媒体功能用户的安全和隐私更精细的视觉体验 小结 前言 哈喽大家好&#xff0c;我是阿Q。近期&#xff0c;【2023 Google …

TVS二极管的小知识

TVS二极管的小知识 文章目录 TVS二极管的小知识1、工作原理2、TVS二极管参数详解3、选型指南4、TVS二极管选型注意事项 1、工作原理 TVS&#xff08;Transient Voltage Suppressors&#xff09;二极管&#xff0c;即瞬态电压抑制器&#xff0c;又称雪崩击穿二极管&#xff0c;…

LabelEdit DLSample

LabelEdit改成true SelectedNode.Text"" 关于图像和数据集的信息在字典DLDataset中表示&#xff0c;DLDataset充当一个数据库。更准确地说&#xff0c;它存储关于数据集和在关键样本下收集的单个样本的字典的一般信息。当需要实际的图像数据时&#xff0c;将为每个…

ClickHouse进阶(十六):clickhouse优化-表优化

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…

AD20多层板设计中的平电层设计规则

一般情况下的多层板设计非常复杂&#xff0c;尤其层叠的次序以及平电层的电源层设计&#xff0c;Gnd层的设计比较简单&#xff0c;不需要过多的关注&#xff0c;但是电源层的设计非常关键&#xff0c;常常让人感到无法下手的感觉&#xff0c;这里介绍一个简单的防盲很快的让你上…

云流化:XR扩展现实应用发展的一个新方向!

扩展现实的发展已经改变了我们工作、生活和娱乐的方式&#xff0c;而且这才刚刚开始。扩展现实 (Extended reality, XR) 涵盖了沉浸式技术&#xff0c;包括虚拟现实、增强现实和混合现实。从游戏到虚拟制作再到产品设计&#xff0c;XR 使人们能够以前所未有的方式在计算机生成的…

解决方案 | 法大大电子签加速高校七大场景全面实现数字化

随着互联网技术的普及和发展&#xff0c;数字化校园建设在各高校正如火如荼地开展。无纸化办公是数字化校园建设中非常重要的一项内容&#xff0c;如何更好地在高校实现无纸化办公&#xff0c;为学校的教学、科研及管理服务提高工作效率、规范工作流程&#xff0c;是各高校都应…

window server事件ID说明

重启&#xff1a;1074 6013&#xff1a;系统运行时间 6008&#xff1a;非正常关机或者意外关机 WindowsServer2012R2事件id6008什么意思&#xff1f; 在Windows Server 2012 R2中&#xff0c;事件ID 6008是一个系统事件&#xff0c;它通常表示系统的非正常关机或意外关机。当系…

阿里镜像站下载Centos7

CentOS主流版本有7和8&#xff0c;我们这里选择centos7进行安装&#xff0c;因为现在8已经不更新了&#xff0c;CentOS 8 是一个介于实验性版本和稳定商业版本之间的产物&#xff0c;是最后一个版本&#xff0c;一般情况下&#xff0c;我们更追求稳定性&#xff0c;以我们选择 …

幸福里基于 Flink Paimon 的流式数仓实践

摘要&#xff1a;本文整理自字节跳动基础架构工程师李国君&#xff0c;在 Streaming Lakehouse Meetup 的分享。幸福里业务是一种典型的交易、事务类型的业务场景&#xff0c;这种业务场景在实时数仓建模中遇到了诸多挑战。本次分享主要介绍幸福里业务基于 Flink & Paimon …

常用数据库的 API - 开篇

API API 这个词在大多数人看来可能和 CNS 差不多&#xff0c;前者天天听说就是用不上&#xff0c;后者天天读就是发不了。 不过&#xff0c;通过今天的一个简短介绍&#xff0c;今后 API 这个东西你就用上了&#xff0c;因为在文章最后我将会展示一个最最基础且高频的 API 使…

小白如何选择阿里云服务器配置?CPU内存带宽系统盘选择

阿里云服务器配置选择_CPU内存/带宽/存储配置_小白指南&#xff0c;阿里云服务器配置选择方法包括云服务器类型、CPU内存、操作系统、公网带宽、系统盘存储、网络带宽选择、安全配置、监控等&#xff0c;阿小云分享阿里云服务器配置选择方法&#xff0c;选择适合自己的云服务器…