go: add «2058. Find the Minimum and Maximum Number of Nodes Between Critical Points»
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
parent
a837889497
commit
d34c3e5b3d
1 changed files with 36 additions and 0 deletions
|
@ -0,0 +1,36 @@
|
|||
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}
|
||||
}
|
Loading…
Reference in a new issue