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'
.
Examples:
Input:
letters = ["c", "f", "j"]
target = "a"
Output: "c"
Input:
letters = ["c", "f", "j"]
target = "c"
Output: "f"
Input:
letters = ["c", "f", "j"]
target = "d"
Output: "f"
Input:
letters = ["c", "f", "j"]
target = "g"
Output: "j"
Input:
letters = ["c", "f", "j"]
target = "j"
Output: "c"
Input:
letters = ["c", "f", "j"]
target = "k"
Output: "c"
Note:
letters
has a length in range[2, 10000]
.letters
consists of lowercase letters, and contains at least 2 unique letters.target
is a lowercase letter.
解决
遍历数组,找出数组中最小的数smallest
和比target
大的数中最小的数result
,同时有一个bool变量flag
记录数组是否存在比target
大的数。
- 若
flag == true
,则存在比target
大的数,返回result
- 若
flag == false
,则不存在比target
大的数,返回smallest
class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
bool flag = false;
char result = 'z';
char smallest = 'z';
for (vector<char>::iterator it = letters.begin(); it != letters.end(); it++) {
if ((*it) > target) {
flag = true;
result = ((*it) < result) ? (*it) : result;
}
smallest = ((*it) < smallest) ? (*it) : smallest;
}
if (!flag) {
return smallest;
} else {
return result;
}
}
};