您的位置:首页 > 其它

算法分析与设计week11--744. Find Smallest Letter Greater Than Target

2018-01-12 11:27 435 查看

744. Find Smallest Letter Greater Than Target

Description

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

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.

Analysis

解法1:暴力求解

class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
for (int i = 0; i < letters.size(); i++) {
if (letters[i] > target) {
return letters[i];
}
}

return letters[0];
}
};


解法2:二分搜索

class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
if (target < letters[0] || letters[letters.size() - 1] <= target) return letters[0];

int left = 0, right = letters.size() - 1, mid;

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

if (letters[mid] <= target) {
return letters[mid + 1];
} else if (letters[mid - 1] > target) {
return letters[mid - 1];
} else {
return letters[mid];
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: