zoukankan      html  css  js  c++  java
  • 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'.

    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:

    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.

    二刷:

    如果没有比target大的元素,就返回数组第一个元素,time: O(log(n)), space: O(1)

    class Solution {
        public char nextGreatestLetter(char[] letters, char target) {
            int left = 0, right = letters.length - 1;
            while(left + 1 < right) {
                int mid = left + (right - left) / 2;
                if(letters[mid] <= target) {
                    left = mid;
                } else {
                    right = mid;
                }
            }
            
            return letters[left] > target ? letters[left] : (letters[right] > target ? letters[right] : letters[0]);
        }
    }

    or

    class Solution {
        public char nextGreatestLetter(char[] letters, char target) {
            int left = 0, right = letters.length - 1;
            while(left <= right) {
                int mid = left + (right - left) / 2;
                if(letters[mid] <= target) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
            
            return letters[left % letters.length];
        }
    }

    一刷:

    如果没有比target大的元素,就返回数组第一个元素

    time: O(log(n)), space: O(1)

    class Solution {
        public char nextGreatestLetter(char[] letters, char target) {
            int left = 0, right = letters.length - 1;
            while(left + 1 < right) {
                int mid = left + (right - left) / 2;
                if(letters[mid] == target)
                    left = mid;
                else if(letters[mid] < target)
                    left = mid;
                else
                    right = mid;
            }
            if(letters[left] > target)
                return letters[left];
            if(letters[right] > target)
                return letters[right];
            else
                return letters[0];
        }
    }
  • 相关阅读:
    Android应用签名
    Win7环境下TreeSaver编译环境的搭配
    TreeSaver 使用教程整理——Step 4: Using a Title Figure
    使用jquery获取父元素或父节点的方法
    IIS 错误代码分析手册
    敏捷开发 规范
    Asp.net中时间格式化的几种方法
    在Oracle中使用Guid
    jquery 当前时间
    JQuery一种取同级值的方式 比如你在GridView中如下
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10129430.html
Copyright © 2011-2022 走看看