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 }
  • 相关阅读:
    PAT (Advanced Level) 1114. Family Property (25)
    PAT (Advanced Level) 1113. Integer Set Partition (25)
    PAT (Advanced Level) 1112. Stucked Keyboard (20)
    PAT (Advanced Level) 1111. Online Map (30)
    PAT (Advanced Level) 1110. Complete Binary Tree (25)
    PAT (Advanced Level) 1109. Group Photo (25)
    PAT (Advanced Level) 1108. Finding Average (20)
    PAT (Advanced Level) 1107. Social Clusters (30)
    PAT (Advanced Level) 1106. Lowest Price in Supply Chain (25)
    PAT (Advanced Level) 1105. Spiral Matrix (25)
  • 原文地址:https://www.cnblogs.com/strengthen/p/10525089.html
Copyright © 2011-2022 走看看