前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang刷leetcode 滑动窗口(3)最长湍流子数组

golang刷leetcode 滑动窗口(3)最长湍流子数组

作者头像
golangLeetcode
发布2022-08-02 15:53:43
2950
发布2022-08-02 15:53:43
举报
文章被收录于专栏:golang算法架构leetcode技术php

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:

代码语言:javascript
复制
输入:[9,4,2,10,7,8,8,1,9]
输出:5
解释:(A[1] > A[2] < A[3] > A[4] < A[5])

示例 2:

代码语言:javascript
复制
输入:[4,8,12,16]
输出:2

示例 3:

代码语言:javascript
复制
输入:[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)两个数相等

代码语言:javascript
复制
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
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档