【C++、二分法】LeetCode744. 尋找比目標字母大的最小字母

  1. 尋找比目標字母大的最小字母
給你一個排序後的字符列表 letters ,列表中只包含小寫英文字母。另給出一個目標字母 target,請你尋找在這一有序列表裏比目標字母大的最小字母。

在比較時,字母是依序循環出現的。舉個例子:

如果目標字母 target = 'z' 並且字符列表爲 letters = ['a', 'b'],則答案返回 'a'

示例:

輸入:
letters = ["c", "f", "j"]
target = "a"
輸出: "c"

輸入:
letters = ["c", "f", "j"]
target = "c"
輸出: "f"

輸入:
letters = ["c", "f", "j"]
target = "d"
輸出: "f"

輸入:
letters = ["c", "f", "j"]
target = "g"
輸出: "j"

輸入:
letters = ["c", "f", "j"]
target = "j"
輸出: "c"

輸入:
letters = ["c", "f", "j"]
target = "k"
輸出: "c"
 

提示:

letters長度範圍在[2, 10000]區間內。
letters 僅由小寫字母組成,最少包含兩個不同的字母。
目標字母target 是一個小寫字母。

貼一篇優雅的解答:

class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
        int len = letters.size();
        int l = 0;
        int r = len - 1;
        while (l <= r)
        {
            int mid = l + (r - l) / 2;
            if (target < letters[mid])
                r = mid - 1;
            else
                l = mid + 1;
        }
        return letters[l % len];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章