Leetcode每日一题 744. 寻找比目标字母大的最小字母 二分应用题

📖本篇内容:Leetcode每日一题 744. 寻找比目标字母大的最小字母 二分应用题

📑 文章专栏:leetcode每日一题《打卡日常》

📆 最近更新:2022 年 3 月 31 日 Leetcode每日一题 728. 自除数 简单模拟

⭐算法仓库:小付的算法之路——Alascanfu-algorithm.git.io

🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起

🙊写在前面🙊

最近很忙

题目

给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。

在比较时,字母是依序循环出现的。举个例子:

如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’

示例1:

输入: letters = ["c", "f", "j"],target = "a"
输出: "c"

示例2:

输入: letters = ["c","f","j"], target = "c"
输出: "f"

示例3:

输入: letters = ["c","f","j"], target = "d"
输出: "f"

提示

📝思路📝

本题考查知识点

  • 这是 y总 归纳的二分题解模板哦~

  • 具有单调性的问题一定可以采用二分来解决该问题。但是能采用二分来解决的问题不一定具有单调性。——故二分本质并非是单调性

  • 二分的本质边界中某种性质,在右半边区间满足条件左半边区间不满足条件的这个性质可以采用二分

    第一个模板:用来找满足该性质的边界值

    • mid = l + r >> 1
    • if (check(mid))
      • true [l,mid] ----- > r = mid
      • false [mid+1,r] -----> l = mid + 1

    第二个模板:用来找不满足性质的边界值

    • mid = l + r + 1>> 1
    • if (check(mid))
      • true [mid,r] ----- > l = mid
      • false [l,mid-1] -----> r = mid - 1

二分思想模板理解

注意点:

  • 一般我们都是根据check函数来定义边界,如果check 函数为true时 l = midmid = l + r + 1 >> 1 ,如果check 函数为true时 r = mid 则mid = l + r >> 1
  • 这里我们可以理解为如果针对于 l = r - 1的情况来进行考虑,因为 如果 mid = l + r >> 1 的话,那么向下取整那么 l = l 就会造成死循环,这也就是为什么这里需要加1

⭐代码实现⭐

二分应用

class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        int l = 0;
        int r = letters.length -1;
        while (l < r){
            int mid = l + r >> 1;
            if (letters[mid] > target){
                r = mid;
            }else {
                l = mid + 1;
            }
        }
        return target >= letters[letters.length-1] ? letters[0]:letters[l];
    }
}
  • 时间复杂度: O( l o g N logN logN)
  • 空间复杂度: O( 1 1 1)

运行结果

二分应用
在这里插入图片描述

🙊写在最后🙊

2022- 4- 3今天小付打卡了哦~

美好的日出 美好的山河

都因有你存在 而璀璨 耀眼

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alascanfu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值