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 协议 ,转载请注明出处!