题目:
分析,虽然是简单题,但是,准备,面试绝对不能眼高手低。
方法1:调用库函数:
lower_bound() 寻找大于等于
upper_bound() 寻找大于。
返回的是指针:
获取下标:lower_bound() - v.begin
或者 * lower_bound() 直接访问元素。
但是:
如果不存在,那么返回的是最后一个位置的下一个位置,直接* 有些编译器会报错,有些返回0。
所以,一般应该先判断最后一个元素,在使用。
class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
int c=upper_bound(letters.begin(),letters.end(),target)-letters.begin();
if(c==letters.size()) return letters[0];
return letters[c];
}
};
方法二:自己实现二分:
推荐模板,不是变态二分细节,均可解决。
初始值应该考虑没有任何答案的情况,因为不经过ans=。。。这个代码!。很好!
class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
int a=0,b=letters.size()-1;
char ans=letters[0];
while(a<=b)
{
int c=a+(b-a)/2;
if(letters[c]>target){
ans=letters[c];
b=c-1;
}
else a=c+1;
}
return ans;
}
};