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

寻找比目标字母大的最小字母

题目描述:

给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。

在比较时,字母是依序循环出现的。举个例子:

如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’

示例 1:

输入: letters = [“c”, “f”, “j”],target = “a”
输出: “c”
示例 2:

输入: letters = [“c”,”f”,”j”], target = “c”
输出: “f”
示例 3:

输入: letters = [“c”,”f”,”j”], target = “d”
输出: “f”

提示:

2 <= letters.length <= 104
letters[i] 是一个小写字母
letters 按非递减顺序排序
letters 最少包含两个不同的字母
target 是一个小写字母

思路:

时间复杂度:O(logn),空间复杂度O()

二分,双百

代码:

func nextGreatestLetter(letters []byte, target byte) byte {
    n := len(letters)
    l,r := 0,n-1
    idx := n*2
    for l<=r{
        mid := (r+l)/2
        if check(letters,target,mid) {
            idx = min(idx,mid)
            r = mid-1
        }else{
            l = mid+1
        }
    }
    return letters[idx % n]
}

func check(letters []byte, target byte, mid int) bool{
    if letters[mid]>target{
        return true
    }
    return false
}
func min(a , b int)int{
    if a>b{
        return b
    }
    return a
}

代码效率:

执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.5 MB, 在所有 Go 提交中击败了100.00%的用户


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!