LeetCode 978.最长湍流子数组

给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 。

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

更正式地来说,当 arr 的子数组 Ai, Ai+1, ..., Aj 满足仅满足下列条件时,我们称其为湍流子数组:

若 i <= k < j :

当 k 为奇数时, Ak > Ak+1,且

当 k 为偶数时,Ak < Ak+1

或 若 i <= k < j :

当 k 为偶数时,Ak > Ak+1 ,且

当 k 为奇数时, Ak < Ak+1

示例 1:

输入:arr = 9,4,2,10,7,8,8,1,9

输出:5

解释:arr1 > arr2 < arr3 > arr4 < arr5

示例 2:

输入:arr = 4,8,12,16

输出:2

示例 3:

输入:arr = 100

输出:1

提示:

1 <= arr.length <= 4 * 104^44

0 <= arri <= 109^99

分组循环,每组是一个湍流子数组:

cpp 复制代码
class Solution {
public:
    int maxTurbulenceSize(vector<int>& arr) {
        int n = arr.size();

        // 初始化结果值为1,当整个数组的值都相等时,对应该最小值1
        int ans = 1;

        int i = 0;
        while (i < n - 1) {
            int start = i;
            ++i;

            // 如果两个值相等,则必然不是湍流子数组
            if (arr[i] == arr[start]) {
                continue;
            }
            
            while (i < n - 1 && (long long)(arr[i] - arr[i - 1]) * (arr[i + 1] - arr[i]) < 0) {
                ++i;
            }

            ans = max(ans, i - start + 1);
        }

        return ans;
    }
};

如果arr的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。

相关推荐
Kina_C13 分钟前
LVS负载均衡的十二种核心调度算法
linux·运维·算法·负载均衡·lvs
hansang_IR1 小时前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp
核数聚2 小时前
【赛迪专访核数聚】深耕数据治理,打通数据孤岛夯实 AI 发展根基
大数据·人工智能·算法
小许同学记录成长2 小时前
相对辐射定标技术文档
图像处理·算法
白白白小纯2 小时前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode
小羊先生car2 小时前
RTOS-F429-HAL-(动/静态)任务的创建(2026/7/27)
开发语言·算法·c#
无忧.芙桃3 小时前
数据结构之堆
c语言·数据结构·c++·算法·
Sagittarius_A*3 小时前
[LitCTF2026] lit_xor_two_story
python·算法·密码学
小蒋学算法3 小时前
算法-删除元素后最大固定点数目-典型最长增长序列算法
数据结构·算法
RD_daoyi3 小时前
Google偷偷给AI引用加了五个新功能:内联引用、悬停预览、品牌展示……但点击率真的回来了吗?
大数据·网络·人工智能·算法·安全·搜索引擎