当前位置:网站首页>力扣每日一题-第51天-744. 寻找比目标字母大的最小字母

力扣每日一题-第51天-744. 寻找比目标字母大的最小字母

2022-08-10 00:48:00 重邮研究森

2022.8.9今天你刷题了吗?


题目:

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

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

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

分析:

给定一个vector,里面是char类型,以及一个target也是char类型,你需要在vector里面找到一个大于target的字母,且该字母为vector中最小字母。那么就会存在两种情况。

1.找到了存在的字母:直接返回该字母。

2.找不到该字母:直接返回vector第一个字母。

思路:遍历vector数组,每遍历一次判断一次,如果遇到满足条件直接返回,如果不满足最后返回首字母。

解析:

1.暴力法

class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
    sort(letters.begin(),letters.end());
    for(auto &ch:letters)
    {
        if(ch-'a'<=target-'a')
        {

        }
        else
        {
            return ch;
        }
    }  
    return letters[0];  
    }
};

2.二分法

延续暴力法思路,区别在于不是直接遍历vector,而是利用二分查找从中间开始找,节约时间。

class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
        int l=0, r=letters.size()-1;
        int ret = 0;
        while(l <= r){
            int m = l + (r-l)/2;
            if(letters[m] <= target){
                l = m + 1;
            }else{
                ret = m;
                r = m - 1;
            }
        }

        return letters[ret];
    }
};

原网站

版权声明
本文为[重邮研究森]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_60524373/article/details/126247017