[LeetCode] Problem 744 - Find Smallest Letter Greater Than Target

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’.

Example

No.1

Input:
letters = [“c”, “f”, “j”]
target = “a”

Output: “c”

No.2

Input:
letters = [“c”, “f”, “j”]
target = “c”

Output: “f”

No.3

Input:
letters = [“c”, “f”, “j”]
target = “d”

Output: “f”

No.4

Input:
letters = [“c”, “f”, “j”]
target = “g”

Output: “j”

No.5

Input:
letters = [“c”, “f”, “j”]
target = “j”

Output: “c”

No.6

Input:
letters = [“c”, “f”, “j”]
target = “k”

Output: “c”

Note

  1. letters has a length in range [2, 10000].
  2. letters consists of lowercase letters, and contains at least 2 unique letters.
  3. target is a lowercase letter.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public char nextGreatestLetter(char[] letters, char target) {
int n = letters.length;

if (target < letters[0] || target >= letters[n - 1])
return letters[0];

int left = 0;
int right = n - 1;

while (left < right) {
int mid = left + (right - left) / 2;

if (letters[mid] <= target)
left = mid + 1;
else
right = mid;
}

return letters[left];
}