/
100101.go
49 lines (45 loc) · 1.04 KB
/
100101.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main
import (
"github.com/emirpasic/gods/sets/hashset"
"github.com/emirpasic/gods/trees/avltree"
)
func findIndices(nums []int, indexDifference int, valueDifference int) []int {
var (
t = avltree.NewWithIntComparator()
)
for i := indexDifference; i < len(nums); i++ {
v := t.GetNode(nums[i])
if v == nil {
t.Put(nums[i], hashset.New(i))
} else {
set := v.Value.(*hashset.Set)
set.Add(i)
}
}
for i := 0; i < len(nums)-indexDifference; i++ {
v := t.Right()
set := v.Value.(*hashset.Set)
if absSub(nums[i], v.Key.(int)) >= valueDifference {
return []int{i, set.Values()[0].(int)}
}
v = t.Left()
set = v.Value.(*hashset.Set)
if absSub(nums[i], v.Key.(int)) >= valueDifference {
return []int{i, set.Values()[0].(int)}
}
v = t.GetNode(nums[i+indexDifference])
set = v.Value.(*hashset.Set)
if set.Size() == 1 {
t.Remove(nums[i+indexDifference])
} else {
set.Remove(i + indexDifference)
}
}
return []int{-1, -1}
}
func absSub(a, b int) int {
if a-b < 0 {
return b - a
}
return a - b
}