温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

leetcode如何求最长湍流子数组

发布时间:2021-12-16 09:40:50 来源:亿速云 阅读:139 作者:小新 栏目:大数据

小编给大家分享一下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如何求最长湍流子数组”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI