zoukankan      html  css  js  c++  java
  • [Swift]LeetCode744. 寻找比目标字母大的最小字母 | Find Smallest Letter Greater Than Target

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10525089.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given a list of sorted characters letterscontaining 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.

    给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。

    数组里字母的顺序是循环的。举个例子,如果目标字母target = 'z' 并且有序数组为 letters = ['a', 'b'],则答案返回 'a'

    示例:

    输入:
    letters = ["c", "f", "j"]
    target = "a"
    输出: "c"
    
    输入:
    letters = ["c", "f", "j"]
    target = "c"
    输出: "f"
    
    输入:
    letters = ["c", "f", "j"]
    target = "d"
    输出: "f"
    
    输入:
    letters = ["c", "f", "j"]
    target = "g"
    输出: "j"
    
    输入:
    letters = ["c", "f", "j"]
    target = "j"
    输出: "c"
    
    输入:
    letters = ["c", "f", "j"]
    target = "k"
    输出: "c"
    

    注:

    1. letters长度范围在[2, 10000]区间内。
    2. letters 仅由小写字母组成,最少包含两个不同的字母。
    3. 目标字母target 是一个小写字母。

    Runtime: 220 ms
    Memory Usage: 19.8 MB
     1 class Solution {
     2     func nextGreatestLetter(_ letters: [Character], _ target: Character) -> Character {
     3         if target >= letters.last!
     4         {
     5             return letters[0]
     6         }
     7         var n:Int = letters.count
     8         var left:Int = 0
     9         var right:Int = n
    10         while (left < right)
    11         {
    12             var mid:Int = left + (right - left) / 2
    13             if letters[mid] <= target
    14             {
    15                 left = mid + 1
    16             }
    17             else
    18             {
    19                 right = mid
    20             }
    21         }
    22         return letters[right]
    23     }
    24 }

    252ms

     1 class Solution {
     2     func nextGreatestLetter(_ letters: [Character], _ target: Character) -> Character {
     3     var left = 0
     4     var right = letters.count
     5     while left < right {
     6         let temp = (left + right) / 2
     7         if letters[temp] > target{
     8             right = temp
     9         }else{
    10             left = temp + 1
    11         }
    12     }
    13     
    14     return letters[left % letters.count]
    15     }
    16 }

    272ms

     1 class Solution {
     2     func nextGreatestLetter(_ letters: [Character], _ target: Character) -> Character {
     3 
     4             if letters.isEmpty {
     5             return target
     6         }
     7         
     8         guard let codeTarget = target.unicodeScalars.first?.value else {
     9             return target
    10         }
    11         
    12         guard let codeLettersLast = letters[letters.count - 1].unicodeScalars.first?.value else {
    13             return target
    14         }
    15         
    16         if codeLettersLast <= codeTarget {
    17             
    18             return letters[0]
    19             
    20         } else {
    21             
    22             for letter in letters {
    23                 guard let code = letter.unicodeScalars.first?.value else {
    24                     continue
    25                 }
    26                 
    27                 if code > codeTarget {
    28                     return letter
    29                 }
    30             }
    31             
    32         }
    33         
    34         return target
    35     }
    36 }

     1 class Solution {
     2     func nextGreatestLetter(_ letters: [Character], _ target: Character) -> Character {
     3         for letter in letters{
     4             if (letter > target){
     5                 return letter
     6             }
     7         }
     8         return letters[0]
     9     }
    10     
    11 }

    284ms

     1 class Solution {
     2     func nextGreatestLetter(_ letters: [Character], _ target: Character) -> Character {
     3         let zValue = "z".unicodeScalars.first!.value
     4         var targetValue = target.unicodeScalars.first!.value
     5         var minV:UInt32 = zValue + 1
     6         var minC:Character?
     7         for letter in letters{
     8             let letterValue = letter.unicodeScalars.first!.value
     9             if letterValue > targetValue,
    10             letterValue < minV{
    11                 minV = letterValue
    12                 minC = letter
    13             }
    14         }
    15         return minC ?? letters[0]
    16     }
    17 }

    288ms

     1 class Solution {
     2     func nextGreatestLetter(_ letters: [Character], _ target: Character) -> Character {
     3         var answer:Character = letters[0]
     4         
     5         for (index,letter) in letters.enumerated(){
     6             if letter <= target{
     7                 if index < letters.count - 1{
     8                 answer = letters[index + 1]}
     9                 if index == letters.count - 1{
    10                     answer = letters[0]
    11                 }}
    12         }
    13         
    14         return answer
    15     }
    16 }
  • 相关阅读:
    ASP.NET MVC CheckBoxFor的int to bool
    ASP.NET MVC jQuery 树插件在项目中使用方法(一)
    ASP.NET MVC Select无限级分类选择下拉框
    ASP.NET MVC 处理404与500错误页面的方法
    使用Angularjs开发Web App 视频课程 --麦子学院课程
    NEVER QUIT. NEVER SAY NEVER.
    夏天那么短,思念却很长
    不要瞧不起别人的生活,他人也在用你看不见的方式努力
    Windows 10 安装 到SSD硬盘
    12.23daily_scrum
  • 原文地址:https://www.cnblogs.com/strengthen/p/10525089.html
Copyright © 2011-2022 走看看