leetcode如何求最长湍流子数组

小编给大家分享一下leetcode如何求最长湍流子数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下列条件时,我们称其为湍流子数组

  • 若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1]

  • 或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]

也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。

返回 A 的最大湍流子数组的长度。

示例 1:

输入:[9,4,2,10,7,8,8,1,9]
输出:5
解释:(A[1] > A[2] < A[3] > A[4] < A[5])

示例 2:

输入:[4,8,12,16]
输出:2

示例 3:

输入:[100]
输出:1

提示:

  1. 1 <= A.length <= 40000

  2. 0 <= A[i] <= 10^9

解题思路:

1,题目意思翻译:连续呈波浪线增减的数组长度最大值

2,取A[i-1],A[i],A[i+1]三个值

A,如果满足条件,则右指针递增

B,不满足条件左指针移动到当前位置

3,注意边界条件

A,一个数

B,两个数

(1)两个数不等

(2)两个数相等

C,A[i-1],A[i],A[i+1]三个值中

(1)3个数相等

(2)两个数相等

func maxTurbulenceSize(A []int) int {    if len(A) <2{        return len(A)    }    if len(A)==2{        if A[0]==A[1]{            return 1        }        return 2    }    start:=0    max:=0    for i:=1;i<len(A)-1;i++{        if sign(A[i-1],A[i])*sign(A[i],A[i+1])!=-1{            start=i            if sign(A[i-1],A[i])==0 && sign(A[i],A[i+1])==0{                if max<1{                    max=1                }               }else{                if max <2{                    max=2                }            }                    }else if max< i-start+2{            max=i-start+2        }    }    return max}
func sign(a,b int) int{    if a>b{        return 1    }    if a==b{        return 0    }    return -1}

以上是“leetcode如何求最长湍流子数组”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/224041.html

(0)
上一篇 2022年1月7日 05:03
下一篇 2022年1月7日 05:03

相关推荐

发表回复

登录后才能评论