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)。

相关推荐
小宋加油啊4 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
lqqjuly4 小时前
前沿算法深度解析(一)
算法
小欣加油5 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
happymaker06267 小时前
LeetCodeHot100——42.接雨水
算法
阿正的梦工坊8 小时前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
烬羽8 小时前
从零理解树与二叉树:用 JS 带你手撕遍历和递归
javascript·数据结构
YHL8 小时前
🚀从零理解树与二叉树 —— 概念、实现与遍历
前端·javascript·数据结构
JieE2128 小时前
JS 到底有多少种数据类型?从ECMA规范到内存本质,一文彻底搞懂
javascript·数据结构·面试
努力努力再努力wz9 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表