IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode 978. 最长湍流子数组 -> 正文阅读

[数据结构与算法]LeetCode 978. 最长湍流子数组

LeetCode 978. 最长湍流子数组

题目:
当 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 <= A.length <= 40000
0 <= A[i] <= 10^9

示例:

输入:[9,4,2,10,7,8,8,1,9]
输出:5
解释:(A[1] > A[2] < A[3] > A[4] < A[5])

输入:[4,8,12,16]
输出:2

输入:[100]
输出:1

代码:

public int maxTurbulenceSize(int[] arr) {
        // 湍流子数组长度   最大湍流子数组长度
        int len = 1, len_max = 0;
        // 数组长度为 1 时: 直接返回最大长度为1
        // 数组长度为 2 时: 如果两元素不相等, 则返回最大长度为2, 否则为1
        if (arr.length <= 2) {
            if (arr.length == 2 && arr[0] != arr[1]) return 2;
            return 1;
        }
        // 判断是哪种情况; 我用true代表第二种, false代表第一种
        boolean flag = true;
        // 开始遍历数组, 每次比较arr[i]和arr[i+1]
        for (int i = 0; i < arr.length; i++) {
            // arr[i]和arr[i+1]不相等, 并且未遍历至数组最后一个元素
            // 注意: i < arr.length-1 放在 arr[i] != arr[i+1] 的前面, 否则会出现数组越界的错误
            if (i < arr.length-1 && arr[i] != arr[i+1]) {
                if (flag) { // 走第二种情况
                    // 若i <= k < j,当 k 为偶数时,A[k] > A[k+1],且当 k 为奇数时,A[k] < A[k+1]
                    if (i%2==0 && arr[i]>arr[i+1] || i%2!=0 && arr[i]<arr[i+1]) {
                        len++;
                        continue;
                    } else {
                        // 否则从当前位置开始, 采用第一种情况遍历
                        flag = false;
                        i--;
                    }
                } else { // 走第一种情况
                    // 若i <= k < j,当 k 为奇数时,A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1]
                    if (i%2==0 && arr[i]<arr[i+1] || i%2!=0 && arr[i]>arr[i+1]) {
                        len++;
                        continue;
                    } else {
                        // 否则从当前位置开始, 采用第二种情况遍历
                        flag = true;
                        i--;
                    }
                }
            }
            // 获得当前最大湍流子数组长度
            if (len > len_max) len_max = len;
            // 初始化湍流子数组长度
            len = 1;
        }
        return len_max;
    }
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:44:30  更:2021-10-20 12:45:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:21:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码