mirror of
https://gitlab.com/mfocko/LeetCode.git
synced 2024-11-14 01:49:41 +01:00
36 lines
715 B
Go
36 lines
715 B
Go
package main
|
|
|
|
func nodesBetweenCriticalPoints(head *ListNode) []int {
|
|
OUT_OF_BOUNDS_DISTANCE := 1000000
|
|
|
|
isCritical := func(x, y, z int) bool {
|
|
return (y < x && y < z) || (y > x && y > z)
|
|
}
|
|
|
|
minDistance := OUT_OF_BOUNDS_DISTANCE
|
|
|
|
previous, node := head, head.Next
|
|
previousIdx, firstIdx := 0, 0
|
|
|
|
index := 1
|
|
for node.Next != nil {
|
|
if isCritical(previous.Val, node.Val, node.Next.Val) {
|
|
if previousIdx == 0 {
|
|
firstIdx = index
|
|
} else {
|
|
minDistance = min(minDistance, index-previousIdx)
|
|
}
|
|
|
|
previousIdx = index
|
|
}
|
|
|
|
index++
|
|
previous, node = node, node.Next
|
|
}
|
|
|
|
if minDistance != OUT_OF_BOUNDS_DISTANCE {
|
|
return []int{minDistance, previousIdx - firstIdx}
|
|
}
|
|
|
|
return []int{-1, -1}
|
|
}
|