LeetCode 744. 寻找比目标字母大的最小字母

莫名其妙的,LeetCode网站怎么也打不开了。。只好注册了中国版的,中国版里的讨论区好冷清,题解质量也堪忧。

给定一个只包含小写字母的有序数组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"

-----------------------------------------------------------------------------------------------------------------------------------

如果target在数组里的话,找到target最后一次出现的位置,然后向后一步即可

如果target不在数组里的话,最终low的位置就是要返回的元素的位置

class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        int low = 0;
        int high = letters.length-1;
        int idx = -1;
        while(low<=high){
            int mid = (low+high)/2;
            if(target==letters[mid]){
                idx = mid;
                low = mid+1;
            }
            else if(target>letters[mid]){
                low = mid+1;
            }
            else if(target<letters[mid]){
                high = mid-1;
            }
        }
        
        if(idx==-1){
            return low<letters.length?letters[low]:letters[0];
        }
        else{
            return idx+1<letters.length?letters[idx+1]:letters[0];
        }
    }
    
}

猜你喜欢

转载自blog.csdn.net/qq_39638957/article/details/88782768