ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

⭐算法入门⭐《二分枚举》简单05 —— LeetCode 744. 寻找比目标字母大的最小字母

2021-10-13 23:30:50  阅读:202  来源: 互联网

标签:744 05 int 字母 枚举 char 算法 letters


文章目录

一、题目

1、题目描述

  给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。
  样例输入: letters = ["c", "f", "j"] target = "a"
  样例输出: "c"

2、基础框架

  • C语言 版本给出的基础框架代码如下:
char nextGreatestLetter(char* letters, int lettersSize, char target){
}

3、原题链接

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

二、解题报告

1、思路分析

  划分数组,比给定字母大的作为绿色,否则为红色。找到绿色的最左边界,如果最左边界为 n n n,代表所有字符都比他小,则返回第一个元素;

2、时间复杂度

  总的时间复杂度为 O ( l o g 2 n ) O(log_2n) O(log2​n)。

3、代码详解


/************** 二分查找 数组 模板 **************/
/*

  1)传参的数组满足:红红红红红红红红绿绿绿绿绿绿绿; 
  2)返回值:绿色区段的左边界; 
*/

int isGreen(char val, char x);

int binarySearch(char *arr, int arrSize, char x) {
    int l = -1, r = arrSize;
    int mid;
    while(l + 1 < r) {
        mid = l + (r - l) / 2;
        if( isGreen(arr[mid], x) )
            r = mid;
        else
            l = mid;
    }
    return r;
}
/************** 二分查找 数组 模板 **************/

int isGreen(char val, char x) {
    return val > x;
}

char nextGreatestLetter(char* letters, int lettersSize, char target){
    int pos = binarySearch(letters, lettersSize, target);
    if(pos == lettersSize) {
        return letters[0];
    }
    return letters[pos];
}

三、本题小知识

   有序数组一般可以优先考虑 二分查找。


四、加群须知

  相信看我文章的大多数都是「 大学生 」,能上大学的都是「 精英 」,那么我们自然要「 精益求精 」,如果你还是「 大一 」,那么太好了,你拥有大把时间,当然你可以选择「 刷剧 」,然而,「 学好算法 」,三年后的你自然「 不能同日而语 」
  那么这里,我整理了「 几十个基础算法 」 的分类,点击开启:

标签:744,05,int,字母,枚举,char,算法,letters
来源: https://blog.csdn.net/WhereIsHeroFrom/article/details/120754725

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有