leetcode 744.寻找比目标字母大的最小字母

本题是二分查找板块中的一个简单题目,不过二分查找比较注重于细节。所以我会着重点出来。

思考:从查找字母这一个要求来说,我们要么选择遍历,要么选择二分查找,因为这里是非递减的,那么我们自然的就会想到用二分查找的方法去查找,所以就忽略遍历这一个比较笨的法子。

那么我们需要找的并不是数组中对应的字符,而是比目标字符大一点的第一个最小字母。这里就说明了我们的判断条件并不简单的就是三个if else 了,而是判断区间。

那么,就开始来从题目中判断条件。我们看到它说的是第一个大于它的字母,那么这个判定条件就应该满足:letters[mid]>target这样才行,并不是letters[mid]>=target,请读者细细品味这一点。

然后在循环结束之后,我们就开始进行判断当前指向的字母是否是我们需要的字母,这里还需要再次判断正确性,如果是,那么就直接返回这个字母;不是的话,那么按照题目要求我们需要返回letters[0]。

注意:在最后判断的时候,如果说当前的字母是与目标字母相同的情况,我们也是返回letters[0],因为题目中要求的是大于它的字母,并不包括等于这个条件的字母。

class Solution {
public:
    char nextGreatestLetter(vector& letters, char target) {
        int left=0;
        int right=letters.size()-1;
        while(lefttarget)
            right=mid;
            else
            left=mid+1;
        }
        if(letters[right]<=target)
        return letters[0];
        else return letters[right];
    }
};

你可能感兴趣的:(leetcode,算法)