mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-06 17:44:10 +08:00
56 lines
945 B
Go
56 lines
945 B
Go
package leetcode
|
|
|
|
// 解法一 模拟法
|
|
func maxTurbulenceSize(arr []int) int {
|
|
inc, dec := 1, 1
|
|
maxLen := min(1, len(arr))
|
|
for i := 1; i < len(arr); i++ {
|
|
if arr[i-1] < arr[i] {
|
|
inc = dec + 1
|
|
dec = 1
|
|
} else if arr[i-1] > arr[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(arr []int) int {
|
|
var maxLength int
|
|
if len(arr) == 2 && arr[0] != arr[1] {
|
|
maxLength = 2
|
|
} else {
|
|
maxLength = 1
|
|
}
|
|
left := 0
|
|
for right := 2; right < len(arr); right++ {
|
|
if arr[right] == arr[right-1] {
|
|
left = right
|
|
} else if (arr[right]-arr[right-1])^(arr[right-1]-arr[right-2]) >= 0 {
|
|
left = right - 1
|
|
}
|
|
maxLength = max(maxLength, right-left+1)
|
|
}
|
|
return maxLength
|
|
}
|