mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-04 08:02:30 +08:00
58 lines
1.0 KiB
Go
58 lines
1.0 KiB
Go
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)
|
||
}
|