【LeetCode 每日一题】744. 寻找比目标字母大的最小字母——(解法一)遍历

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

文章目录

  • [1. 整体思路](#1. 整体思路)
  • [2. 完整代码](#2. 完整代码)
  • [3. 时空复杂度](#3. 时空复杂度)
      • [时间复杂度: O ( N ) O(N) O(N)](#时间复杂度: O ( N ) O(N) O(N))
      • [空间复杂度: O ( 1 ) O(1) O(1)](#空间复杂度: O ( 1 ) O(1) O(1))

1. 整体思路

核心问题

在一个有序 (通常是非递减顺序)的字符数组 letters 中,找到比目标字符 target 大的最小字符。

  • 如果不存在比 target 大的字符,则返回数组的第一个字符(循环比较)。

算法逻辑

  1. 特性利用 :数组 letters 已经是排序过的。
  2. 顺序遍历 :
    • 从左到右遍历数组。
    • 由于数组是有序的,我们遇到的第一个 比 target 大的字符 c,一定就是所有比 target 大的字符中最小的那个。
    • 一旦找到,直接返回该字符。
  3. 循环兜底 :
    • 如果遍历完整个数组都没有找到比 target 大的字符(说明 target 大于或等于数组中的所有字符),根据题目要求("letters wrap around"),应该返回数组的第一个字符 letters[0]。

2. 完整代码

java 复制代码
class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        // 定义一个变量 min,但在当前的逻辑中并没有实际用到它
        // 这行代码是多余的,可以删除
        int min = 26; 

        // 遍历排序后的字符数组
        for (char c : letters) {
            // 核心判断:
            // 因为数组是有序的,第一个满足 c > target 的字符
            // 必然是比 target 大的最小字符。
            if (target < c) {
                return c;
            }
        }
        
        // 如果循环结束仍未返回,说明数组中没有比 target 大的字符
        // 根据题目"循环"的要求,返回数组第一个元素
        return letters[0];
    }
}

3. 时空复杂度

假设数组 letters 的长度为 N N N。

时间复杂度: O ( N ) O(N) O(N)

  • 计算依据 :
    • 最坏情况下(例如 target 非常大,或者目标字符在数组末尾),需要遍历整个数组一次。
  • 结论 : O ( N ) O(N) O(N)。

空间复杂度: O ( 1 ) O(1) O(1)

  • 计算依据 :
    • 代码只使用了常数个额外变量。
  • 结论 : O ( 1 ) O(1) O(1)。
相关推荐
CCblandy10 分钟前
向量检索 ANN 参数实测:换一种数据分布,recall 掉了 51 个百分点
人工智能·python·算法·自然语言处理·性能优化
CS创新实验室11 分钟前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic10123 分钟前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
深圳市快瞳科技有限公司28 分钟前
面向端侧部署的多帧宠物身份识别:完整性评分机制与工程约束
人工智能·算法·计算机视觉·端侧ai·宠物识别·宠物ai·宠物身份识别
悠仁さん2 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
垆边人似月.2 小时前
最优河堤加固(二分答案 + 前缀和)
算法
171320330计算机毕设编程3 小时前
计算机毕业设计 基于Hadoop的新能源汽车发展前景分析 LW PPT
java·大数据·hadoop·python·算法·随机森林·线性回归
垆边人似月.3 小时前
幻兽防御战(贪心算法)
数据结构·算法
DongQiShanRen3 小时前
六根硬件映射(下):物理闭环五步法,抽一条已实装的看
大数据·jvm·人工智能·算法·rust·哈希算法·集成学习
Code_Solitude3 小时前
c语言:指针(3)+冒泡排序
java·c语言·算法