美文网首页
IOS 算法(基础篇) ----- 有效的山脉数组

IOS 算法(基础篇) ----- 有效的山脉数组

作者: ShawnAlex | 来源:发表于2020-11-04 11:40 被阅读0次

    题目: 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。

    山脉数组:

    A.length >= 3
    在 0 < i < A.length - 1 条件下,存在 I 使得:
    A[0] < A[1] < ... A[i-1] < A[I]
    A[i] > A[i+1] > ... > A[A.length - 1]

    示意图

    例子:

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

    输入:[1,2,3,4,5,6,7] 或 [7,6,5,4,3,2,1]
    输出:false

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

    解题思路

    1.遍历法

    1.循环上山先走到山顶
    2.接下来循环下山走到山下

    注意点
    ① 首尾项不能是山顶
    ② 相等直接跳出循环
    ③ 必须有"上山", "下山"过程

        func validMountainArray(_ A: [Int]) -> Bool {
    
            if A.count < 3 {
                return false
            }
            
            var max = -1, maxif = false, minif = false
            for i in 0..<A.count {
               
                if maxif == false {
                    if A[i] == max {
                        return false;
                    }else if A[i] > max && i == 1{
                        minif = true
                    }else if A[i] < max {
                        maxif = true
                    }
                    max = A[i]
                }else {
                    if A[i] < max {
                        max = A[i]
                    }else {
                        return false
                    }
                }
            }
            
            if maxif == false || minif == false {
                return false
            }
            
            return true
        }
    

    2.双指针

    1.针对下标, 循环判断 先上山下标递增, 数值变小结束
    2.循环判断 从另一面上山下标递减, 数值变小结束
    3.判断上顶是否相等

    注意点
    ① 首尾项不能是山顶
    ② 下标留意不能多减

        func validMountainArray(_ A: [Int]) -> Bool {
    
            if A.count < 3 {
                return false
             }
            var startIndex: Int = 0
            var endIndex: Int = A.count - 1
            while startIndex < endIndex && A[startIndex] < A[startIndex+1] {
                startIndex += 1
            }
            while startIndex < endIndex && A[endIndex] < A[endIndex-1]  {
                endIndex -= 1
            }
            if startIndex == 0 || endIndex == A.count-1{
                return false
            }
            return startIndex == endIndex
    
        }
    

    题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
    IOS 算法合集地址

    相关文章

      网友评论

          本文标题:IOS 算法(基础篇) ----- 有效的山脉数组

          本文链接:https://www.haomeiwen.com/subject/zjfgvktx.html