Files
LeetCode-Go/leetcode/0978.Longest-Turbulent-Subarray/978. Longest Turbulent Subarray.go
2020-11-25 00:46:59 +08:00

58 lines
1.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package leetcode
// 解法一 模拟法
func maxTurbulenceSize(A []int) int {
inc, dec := 1, 1
maxLen := min(1, len(A))
for i := 1; i < len(A); i++ {
if A[i-1] < A[i] {
inc = dec + 1
dec = 1
} else if A[i-1] > A[i] {
dec = inc + 1
inc = 1
} else {
inc = 1
dec = 1
}
maxLen = max(maxLen, max(inc, dec))
}
return maxLen
}
func max(a int, b int) int {
if a > b {
return a
}
return b
}
func min(a int, b int) int {
if a > b {
return b
}
return a
}
// 解法二 滑动窗口
func maxTurbulenceSize1(A []int) int {
if len(A) == 1 {
return 1
}
// flag > 0 代表下一个数要大于前一个数flag < 0 代表下一个数要小于前一个数
res, left, right, flag, lastNum := 0, 0, 0, A[1]-A[0], A[0]
for left < len(A) {
if right < len(A)-1 && ((A[right+1] > lastNum && flag > 0) || (A[right+1] < lastNum && flag < 0) || (right == left)) {
right++
flag = lastNum - A[right]
lastNum = A[right]
} else {
if flag != 0 {
res = max(res, right-left+1)
}
left++
}
}
return max(res, 1)
}