744. 寻找比目标字母大的最小字母题解
题目来源:744. 寻找比目标字母大的最小字母
2022.04.03 每日一题
LeetCode 题解持续更新中Github仓库地址 CSDN博客地址
今天的题目就很简单了,给定一个有序数组,和一个值 target
,找到大于target
的最小值,如果找不到就返回当前数组中的最小值
法一:直接搜索
第一种,也是最简单的思路,直接暴力搜索就好了,找到满足的值就返回,找不到就返回第一个
class Solution {
public:
char nextGreatestLetter(vector<char> &letters, char target) {
for (char ch: letters)
if (ch > target)
return ch;
return letters[0];
}
};
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
for(char ch:letters)
if(ch>target)
return ch;
return letters[0];
}
}
法二:二分查找
通过二分查找来寻找到相应的值,由于给的数组是递增的,如果数组的最大值小于 目标值 target
,直接返回数组中的最小值
class Solution {
public:
char nextGreatestLetter(vector<char> &letters, char target) {
int n = letters.size();
if (letters[n - 1] < target) return letters[0];
int l = 0, r = n - 1;
while (l < r) {
int mid = (r - l) / 2 + l;
if (letters[mid] > target) r = mid;
else l = mid + 1;
}
return letters[l];
}
};
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
int n = letters.length;
if (letters[n - 1] < target) return letters[0];
int l = 0, r = n - 1;
while (l < r) {
int mid = (r - l) / 2 + l;
if (letters[mid] > target) r = mid;
else l = mid + 1;
}
return letters[l];
}
}