978. Longest Turbulent Subarray [Medium]
生活随笔
收集整理的這篇文章主要介紹了
978. Longest Turbulent Subarray [Medium]
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
/*** 自己的做法,用downFlg標(biāo)志當(dāng)前的判斷是否需要是下降or上升來(lái)保持和前面的連續(xù)* 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),代碼更簡(jiǎn)潔,運(yùn)行結(jié)果效率無(wú)差別*/
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;}
}
/*** 滑動(dòng)窗口法,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),代碼更簡(jiǎn)潔,效率低一點(diǎn)點(diǎn)* 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;}
}
總結(jié)
以上是生活随笔為你收集整理的978. Longest Turbulent Subarray [Medium]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 算法#03--详解最小二乘法原理和代码
- 下一篇: 大学物理实验——拉伸法测杨氏模量