题目描述:
Given a list of sorted characters letters containing only lowercase letters, and given a target letter target, find the smallest element in the list that is larger than the given target.
Letters also wrap around. For example, if the target is target = 'z' and letters = ['a', 'b'], the answer is 'a'.
思路一:
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
if (target >= letters[letters.length - 1] || target < letters[0])
return letters[0];
for (int i = 0; i < letters.length; i++)
{
if (letters[i] > target)
return letters[i];
}
return letters[0];
}
}
思路二:
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
if (target >= letters[letters.length - 1] || target < letters[0])
return letters[0];
int low = 0;
int high = letters.length - 1;
while (low < high)
{
int mid = (low + high) / 2;
if (letters[mid] > target)
high = mid;
else
low = mid + 1;
}
return letters[low];
}
}
思路三:
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
if (target >= letters[letters.length - 1] || target < letters[0])
return letters[0];
TreeSet<Character> set = new TreeSet<>();
for (char c : letters)
set.add(c);
if (set.higher(target) == null)
return set.first();
return set.higher(target);
}
}