日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

978. Longest Turbulent Subarray [Medium]

發布時間:2024/1/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 978. Longest Turbulent Subarray [Medium] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** 自己的做法,用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]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。