题目
给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。
返回 letters 中大于 target 的最小的字符。如果不存在这样的字符,则返回 letters 的第一个字符。
解法一
class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
int l=0;
int r=letters.size()-1;
if(letters[r]<=target){
return letters[l];
}
while(l<r){
int mid=l+(r-l)/2;
if(letters[mid]>target){
r=mid;
}else if(letters[mid]<=target){
l=mid+1;
}
}
return letters[l];
}
};
解法二
class Solution {
public:
char nextGreatestLetter(vector<char> &letters, char target) {
return target < letters.back() ? *upper_bound(letters.begin(), letters.end() - 1, target) : letters[0];
}
};
如何比较字符串
直接大于小于号就可以
letters.back()
letters.back() 是 C++ 中 std::vector 的成员函数,用于返回容器中最后一个元素的引用。back() 函数没有参数,它直接返回最后一个元素,不会对容器进行修改。
upper_bound为什么要加
*upper_bound 是为了获取 upper_bound 函数返回的迭代器指向的元素的值。upper_bound 函数返回的是一个迭代器,指向第一个大于给定值的元素。
在这段代码中,* 是用于解引用迭代器的操作符。通过解引用操作符 *,我们可以获取迭代器指向的元素的值。
所以,*upper_bound(letters.begin(), letters.end() - 1, target) 表示获取 upper_bound 函数返回的迭代器指向的元素的值,即大于 target 的最小元素。
在这个特定的代码片段中,return 语句将返回大于 target 的最小元素作为函数的返回值。
用于获取解析的元素值返回