題目:
給定一個(gè)只包含小寫字母的有序數(shù)組letters 和一個(gè)目標(biāo)字母 target,尋找有序數(shù)組里面比目標(biāo)字母大的最小字母油宜。
數(shù)組里字母的順序是循環(huán)的另伍。舉個(gè)例子宪睹,如果目標(biāo)字母target = 'z' 并且有序數(shù)組為 letters = ['a', 'b'],則答案返回 'a'岗照。
示例:
思路:
二分查找村象,注意返回值
代碼:
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
//len 為 數(shù)組的長度
int len = letters.length;
//指向左邊第一個(gè)元素
int l = 0;
//指向最后一個(gè)元素
int h = len - 1;
//如果 l > h 就結(jié)束循環(huán)
while (l <= h) {
//mid 為中點(diǎn)位置
int mid = l + ((h - l)/2);
//如果目標(biāo)字符大于終點(diǎn)位置的字符
//就將范圍變?yōu)?l 到 mid - 1
if (target < letters[mid]) {
h = mid - 1;
} else {
//否則,將范圍變?yōu)?mid + 1 到 h
l = mid + 1;
}
}
//如果最后 l 的位置大于數(shù)組長度攒至,就返回?cái)?shù)組首位字符
//否則厚者,返回 l 位置的字符
//例如,target = "z" , letters = {"a", "c"}
return l < len ? letters[l] : letters[0];
}
}
時(shí)間復(fù)雜度:O(logn)嗓袱,空間復(fù)雜度:O(1)