首页 > 试题广场 >

游游的最长稳定子数组

[编程题]游游的最长稳定子数组
  • 热度指数:1800 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}定义一个数组被称为稳定,当且仅当对于数组中任意相邻元素 a_i,a_{i+1},都有 |a_{i+1}-a_i|\leqq 1
\hspace{15pt}给定长度为 n 的整数数组 a,请你求出其最长稳定连续子数组的长度。

输入描述:
\hspace{15pt}第一行输入一个整数 n\left(1\leqq n\leqq 10^{5}\right)——数组长度。 
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots ,a_n\left(1\leqq a_i\leqq 10^{9}\right)——数组元素。


输出描述:
\hspace{15pt}输出一个整数,表示最长稳定连续子数组的长度。
示例1

输入

5
2 4 2 3 2

输出

3

说明

子数组 [2,3,2] 满足稳定条件且长度最大。
package main

import (
    "fmt"
)

func Abs(a, b int) int{
    if a >b{
        return a-b
    }
    return b-a
}

func main() {
    var n int
    fmt.Scan(&n)
    var k = make([]int, n+1) // 多一个
    for i:=0;i<n;i++{
        fmt.Scanf("%d", &k[i])
    }
    k[n]=-2 // -2-0>1,确保k最后的稳定部分计算进去
    var left, right, max int = 0,1,1
    for right <= n{
        if Abs(k[right], k[right-1]) > 1{
            if max < right - left{
                max = right - left
            }
            left = right
            right++
        }else{
            right++
        }
    }
    fmt.Print(max)
}

发表于 2025-09-07 00:55:26 回复(0)