744. Find Smallest Letter Greater Than Target

俩方法都是用二分查找,一个调库,一个自己写而已。

方法一,调库

 static int wing=[]()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return ;
}(); class Solution
{
public:
char nextGreatestLetter(vector<char>& letters, char target)
{
auto p=upper_bound(letters.begin(),letters.end(),target);
return p==letters.end()? letters[]:*p;
}
};

方法二,自己写二分

 static int wing=[]()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return ;
}(); class Solution
{
public:
char nextGreatestLetter(vector<char>& letters, char target)
{
int sz=letters.size();
int left=,right=sz-;
if(target>=letters[right])
return letters[];
while(left<=right)
{
int mid=left+((right-left)>>);
if(letters[mid]<target)
left=mid+;
else if(letters[mid]>target)
right=mid-;
else
left=mid+;
}
return letters[left];
}
};

自己写的时候要注意,在判定时,当letters[mid]==target的时候,不能直接就返回letters[mid+1],因为字符数组中有可能存在一大串和目标字符相等的元素,所以有可能返回到相等的元素之一。

上一篇:【LeetCode】744. Find Smallest Letter Greater Than Target 解题报告(Python)


下一篇:LeetCode 744. Find Smallest Letter Greater Than Target (时间复杂度O(n))