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

手动实现了upper_bound,当查询到结尾时返回第一个元素。二分查找的一个变种,这里也可以直接使用stl中的upper_bound.