744. Find Smallest Letter Greater Than Target

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

方法一,调库

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     char nextGreatestLetter(vector<char>& letters, char target) 
12     {
13         auto p=upper_bound(letters.begin(),letters.end(),target);
14         return p==letters.end()? letters[0]:*p;           
15     }
16 };

方法二,自己写二分

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     char nextGreatestLetter(vector<char>& letters, char target) 
12     {
13         int sz=letters.size();
14         int left=0,right=sz-1;
15         if(target>=letters[right])
16             return letters[0];
17         while(left<=right)
18         {
19             int mid=left+((right-left)>>1);
20             if(letters[mid]<target)
21                 left=mid+1;
22             else if(letters[mid]>target)
23                 right=mid-1;
24             else
25                 left=mid+1;
26         }
27         return letters[left];
28     }
29 };

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

猜你喜欢

转载自www.cnblogs.com/zhuangbijingdeboke/p/9167675.html
今日推荐