zoukankan      html  css  js  c++  java
  • [Swift]LeetCode896. 单调数列 | Monotonic Array

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

    An array is monotonic if it is either monotone increasing or monotone decreasing.

    An array A is monotone increasing if for all i <= jA[i] <= A[j].  An array A is monotone decreasing if for all i <= jA[i] >= A[j].

    Return true if and only if the given array A is monotonic. 

    Example 1:

    Input: [1,2,2,3]
    Output: true
    

    Example 2:

    Input: [6,5,4,4]
    Output: true
    

    Example 3:

    Input: [1,3,2]
    Output: false
    

    Example 4:

    Input: [1,2,4,5]
    Output: true
    

    Example 5:

    Input: [1,1,1]
    Output: true 

    Note:

    1. 1 <= A.length <= 50000
    2. -100000 <= A[i] <= 100000

    如果数组是单调递增或单调递减的,那么它是单调的

    如果对于所有 i <= jA[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= jA[i]> = A[j],那么数组 A 是单调递减的。

    当给定的数组 A 是单调数组时返回 true,否则返回 false。 

    示例 1:

    输入:[1,2,2,3]
    输出:true
    

    示例 2:

    输入:[6,5,4,4]
    输出:true
    

    示例 3:

    输入:[1,3,2]
    输出:false
    

    示例 4:

    输入:[1,2,4,5]
    输出:true
    

    示例 5:

    输入:[1,1,1]
    输出:true 

    提示:

    1. 1 <= A.length <= 50000
    2. -100000 <= A[i] <= 100000

    500ms
     1 class Solution {
     2     enum Order: UInt8 {
     3         case increasing
     4         case decreasing
     5         case identical
     6         case nonMonotonic
     7     }
     8     
     9     func isMonotonic(_ A: [Int]) -> Bool {
    10         guard A.count > 1 else {
    11             return true
    12         }
    13 
    14         var last = A[0]
    15         var order: Order = .identical
    16 
    17         for idx in 1..<A.count {
    18             let num = A[idx]
    19             if num == last {
    20                 continue
    21             } else if (num < last && order == .increasing)
    22             || (num > last && order == .decreasing) {
    23                 order = .nonMonotonic
    24                 break
    25             } else if order == .identical {
    26                 order = num < last ? .decreasing : .increasing
    27             }
    28             last = num
    29         }
    30         return order != .nonMonotonic
    31     }
    32 }

    Runtime: 504 ms
    Memory Usage: 19.6 MB
     1 class Solution {
     2     func isMonotonic(_ A: [Int]) -> Bool {
     3         var crement = true
     4         if A.last! < A.first! {
     5             crement = false
     6         }
     7         for i in 1..<A.count {
     8             if crement {
     9                 if A[i] < A[i-1] {
    10                     return false
    11                 }
    12             } else {
    13                 if A[i] > A[i-1] {
    14                     return false
    15                 }
    16             }
    17         }
    18         return true
    19     }
    20 }

    580ms

     1 class Solution {
     2     func isMonotonic(_ A: [Int]) -> Bool {
     3         let count = A.count
     4         guard count > 2 else {
     5             return true
     6         }
     7         
     8         var flag: Bool?
     9         for i in 1..<count {
    10             if A[i] > A[i - 1] {
    11                 if let mark = flag {
    12                     if !mark {
    13                         return false
    14                     }
    15                 } else {
    16                     flag = true
    17                 }
    18             } else if A[i] < A[i - 1] {
    19                 if let mark = flag {
    20                     if mark {
    21                         return false
    22                     }
    23                 } else {
    24                     flag = false
    25                 }
    26             }
    27         }
    28         return true
    29     }
    30 }

    588ms

     1 class Solution {
     2     func isMonotonic(_ A: [Int]) -> Bool {
     3         var store: Int = 0
     4         for i in 0..<(A.count-1){
     5             let flag = compare(A[i] , A[i+1])
     6             
     7             if flag != 0{
     8                 if flag != store , store != 0{
     9                     return false
    10                 }
    11                 store = flag
    12             }
    13         }
    14         return true
    15     }
    16     
    17     func compare(_ lhs: Int, _ rhs: Int) -> Int{
    18         if lhs == rhs {
    19             return 0
    20         }
    21         else if lhs > rhs{
    22             return 1
    23         }
    24         else{
    25             return -1
    26         }        
    27     }
    28 }

    588ms

     1 class Solution {
     2     func isMonotonic(_ A: [Int]) -> Bool {
     3       if isIncreasing(A: A) || isDecreasing(A: A) {
     4           return true
     5       }
     6         return false
     7     }
     8     
     9     func isIncreasing(A: [Int]) -> Bool {
    10         for i in 0..<A.count-1 {
    11             if A[i] > A[i+1] {
    12                 return false
    13             }
    14         }
    15         return true
    16     }
    17     
    18     func isDecreasing(A: [Int]) -> Bool {
    19         for i in 0..<A.count-1 {
    20             if A[i] < A[i+1] {
    21                 return false
    22             }
    23         }
    24         return true
    25     }
    26 }

    590ms

     1 class Solution {
     2     func isMonotonic(_ A: [Int]) -> Bool {
     3         var isIncrease = true
     4         var isDecrease = true
     5         for i in 1..<A.count {
     6             if A[i-1] > A[i] {
     7                 isIncrease = false
     8                 break
     9             }
    10         }
    11         for i in 1..<A.count {
    12             if A[i-1] < A[i] {
    13                 isDecrease = false
    14                 break
    15             }
    16         }
    17         return isIncrease || isDecrease
    18         
    19     }
    20 }

    608ms

     1 class Solution {
     2     func isMonotonic(_ A: [Int]) -> Bool {
     3         var up = true
     4         var down = true
     5         
     6         for i in 1..<A.count {
     7             if !up || !down { }
     8             up = up && A[i - 1] <= A[i]
     9             down = down && A[i - 1] >= A[i]
    10         }
    11         
    12         return up || down
    13     }
    14 }

    916ms

     1 class Solution {
     2     func isMonotonic(_ A: [Int]) -> Bool {
     3         var flag = 0
     4         for i in 0..<A.count-1 {
     5             if A[i+1] - A[i] != 0 {
     6                 let c = A[i+1] - A[i]
     7                 if flag * c >= 0 {
     8                     flag = c
     9                 } else {
    10                     return false
    11                 }
    12             }
    13         }
    14         return true
    15     }
    16 }
  • 相关阅读:
    菜鸟系列k8s——快速部署k8s集群(3)
    菜鸟系列docker——docker容器(7)
    菜鸟系列Fabric源码学习 — 区块同步
    菜鸟系列Fabric源码学习 — peer节点启动
    菜鸟系列Fabric源码学习 — orderer服务启动
    递归科赫雪花
    汉诺塔递归函数hanoi
    字符串格式化与.format()
    turtle风轮绘制
    接口签名2
  • 原文地址:https://www.cnblogs.com/strengthen/p/10606658.html
Copyright © 2011-2022 走看看