/*** 自己的做法,用downFlg标志当前的判断是否需要是下降or上升来保持和前面的连续* Runtime: 5 ms, faster than 49.88%* Memory Usage: 42.2 MB, less than 84.99%*/
class Solution {public int maxTurbulenceSize(int[] arr) {int len = arr.length, curr = 1, max = 1;Boolean downFlg = null;if (len == 0 || len == 1) {return len;}for (int i = 1; i < len; i++) {if (downFlg == null) {if (arr[i] != arr[i - 1]) {curr++;downFlg = arr[i] > arr[i - 1] ? true : false;} else {curr = 1;}} else if (downFlg && arr[i] < arr[i - 1] || !downFlg && arr[i] > arr[i - 1]) {curr++;downFlg = !downFlg;} else {max = Math.max(max, curr);curr = 1;downFlg = null;if (arr[i] != arr[i - 1]) {i--;}}}max = Math.max(max, curr);return max;}
}
/*** discuss的解法* every element in the turbulent array should be either peak or valley* Runtime: 4 ms, faster than 91.45%* Memory Usage: 42.3 MB, less than 68.82%*/
class Solution {public int maxTurbulenceSize(int[] arr) {int max = 0, curr = 0;for (int i = 0; i < arr.length; i++) {if (i >= 2 && (arr[i - 2] > arr[i - 1] && arr[i - 1] < arr[i] || arr[i - 2] < arr[i - 1] && arr[i - 1] > arr[i])) {curr++;} else if(i >= 1 && arr[i-1] != arr[i]) {max = Math.max(max, curr);curr = 2;} else {max = Math.max(max, curr);curr = 1;}}max = Math.max(max, curr);return max;}
}/*** 或者直接每次更新都max = Math.max(max, curr),代码更简洁,运行结果效率无差别*/
class Solution {public int maxTurbulenceSize(int[] arr) {int max = 0, curr = 0;for (int i = 0; i < arr.length; i++) {if (i >= 2 && (arr[i - 2] > arr[i - 1] && arr[i - 1] < arr[i] || arr[i - 2] < arr[i - 1] && arr[i - 1] > arr[i])) {curr++;} else if(i >= 1 && arr[i-1] != arr[i]) {curr = 2;} else {curr = 1;}max = Math.max(max, curr);}return max;}
}
/*** 滑动窗口法,discuss看到的* 和第一种解法思路基本一样* Runtime: 3 ms, faster than 100.00%* Memory Usage: 42.3 MB, less than 78.52%*/
class Solution {public int maxTurbulenceSize(int[] arr) {int start = 0, end = 1, max = 1, dir = 0;for ( ; end < arr.length; end++) {if (arr[end] > arr[end - 1]) {if (dir == -1) {max = Math.max(max, end - start);start = end - 1;}dir = -1;} else if (arr[end] < arr[end - 1]) {if (dir == 1) {max = Math.max(max, end - start);start = end - 1;}dir = 1;} else {dir = 0;max = Math.max(max, end - start);start = end;}}max = Math.max(max, end - start);return max;}
}/*** 每次更新都max = Math.max(max, curr),代码更简洁,效率低一点点* Runtime: 4 ms, faster than 91.45%* Memory Usage: 42.5 MB, less than 50.12%*/
class Solution {public int maxTurbulenceSize(int[] arr) {int start = 0, end = 1, max = 1, dir = 0;for ( ; end < arr.length; end++) {if (arr[end] > arr[end - 1]) {if (dir == -1) {start = end - 1;}dir = -1;} else if (arr[end] < arr[end - 1]) {if (dir == 1) {start = end - 1;}dir = 1;} else {dir = 0;start = end;}max = Math.max(max, end - start + 1);}       return max;}
}

978. Longest Turbulent Subarray [Medium]相关推荐

  1. 978 Longest turbulent subarray

    文章目录 题目 滑动窗口思路 dp思路 滑动窗口高效 标签:sliding window, 滑动窗口 题目 A subarray A[i], A[i+1], ..., A[j] of A is sai ...

  2. LeetCode #978. Longest Turbulent Subarray

    题目描述: A subarray A[i], A[i+1], ..., A[j] of A is said to be turbulent if and only if: For i <= k ...

  3. LeetCode:978. Longest Turbulent Subarray - Python

    978. 最长湍流子数组 问题描述: 当 A的子数组A[i], A[i+1], ..., A[j]满足下列条件时,我们称其为湍流子数组: 若i <= k < j,当 k为奇数时, A[k] ...

  4. leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)

    题目 https://leetcode.com/problems/longest-turbulent-subarray/ 题解 虽然 similar questions 没列出来,但能想到之前做过的( ...

  5. leetCode 978. Longest Turbulent Subarray

    求一个数组中连续混乱子数组的最大长度,连续混乱子数组满足条件定义为:A[i-1]<A[i]>A[i+1]或A[i-1]>A[i]<A[i+1],最后得出长度 class Sol ...

  6. 978. Longest Turbulent Subarray——array

    题目分析:不是用动态规划,python3没有了cmp函数 class Solution(object):def cmp(self, a, b):if a > b:return 1if a < ...

  7. LeetCode——978. 最长湍流子数组(Longest Turbulent Subarray)——分析及代码(Java)

    LeetCode--978. 最长湍流子数组[Longest Turbulent Subarray]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划(一维数组) (1)思路 (2) ...

  8. [Swift]LeetCode978. 最长湍流子数组 | Longest Turbulent Subarray

    原文地址:https://www.cnblogs.com/strengthen/p/10294636.html A subarray A[i], A[i+1], ..., A[j] of A is s ...

  9. leetcode978. Longest Turbulent Subarray

    题目链接 题目:当 A 的子数组 A[i], A[i+1], -, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[k] > A[ ...

最新文章

  1. 解决swiper在tab切换时,swiper不生效,以及display:none后,无法自动滑动的问题
  2. javascript--------this探险
  3. 深度学习导论(4)神经网络基础
  4. android /data/system/dropbox,Android导出dropbox日志
  5. (45)FPGA条件编译(选择模块)
  6. vue实例方法之set方法的实现原理
  7. element UI表格使用cell-style改变单元格样式
  8. android开机图片格式,Android平台启动图使用.9.png图片
  9. 2023天津大学土木水利专业考研成功经验分享
  10. 0基础也可直接运行的微信表情包批量转换
  11. 大数据影响下的专题地图编制
  12. 2018BDWF大数据世界论坛主题内容公布!
  13. Mybatis如果存在该条数据则修改,否则新增
  14. html5 移动端手写签名,H5移动端项目实现手写签名功能 vue实现手写签名
  15. 北京住房公积金管理中心个人住房公积金 贷款等额均还月还款额参考表
  16. dft变换的两幅图_图片DFT变换
  17. 弘辽科技:淘宝站外引流的方法有哪些?淘宝商家要知道!
  18. atlas 阿里 android,AtlasDemo
  19. (五)比赛中的CV算法(上)cv基础知识和opencv的api
  20. HackBrowserData密码抓取

热门文章

  1. 工作组计算机每次都要链接打印机,局域网打印机问题
  2. 计算机设备接地的目的,电气接地的原理和目的
  3. uniapp做h5页面刷新页面404配置nginx后端开启伪静态
  4. Unity UI界面设计方法
  5. Element UI动态生成多级表头
  6. 生信入门(四)——使用DESeq2进行RNA-seq数据分析
  7. h5原生audio播放amr格式的音频
  8. 读书笔记--零售业概览:未来和现在
  9. 最完整的中国白酒知识大全,一篇文章说全中国白酒
  10. Excel导入数据库