Skip to content

Commit 409e3f2

Browse files
authored
Create Solution3.go
1 parent 217a980 commit 409e3f2

File tree

1 file changed

+83
-0
lines changed
  • solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit

1 file changed

+83
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
func longestSubarray(nums []int, limit int) int {
2+
var maxq, minq Deque
3+
n := len(nums)
4+
l := 0
5+
for r, x := range nums {
6+
for !maxq.Empty() && nums[maxq.Back()] < x {
7+
maxq.PopBack()
8+
}
9+
for !minq.Empty() && nums[minq.Back()] > x {
10+
minq.PopBack()
11+
}
12+
maxq.PushBack(r)
13+
minq.PushBack(r)
14+
15+
if nums[maxq.Front()]-nums[minq.Front()] > limit {
16+
l++
17+
if maxq.Front() < l {
18+
maxq.PopFront()
19+
}
20+
if minq.Front() < l {
21+
minq.PopFront()
22+
}
23+
}
24+
}
25+
return n - l
26+
}
27+
28+
type Deque struct{ l, r []int }
29+
30+
func (q Deque) Empty() bool {
31+
return len(q.l) == 0 && len(q.r) == 0
32+
}
33+
34+
func (q Deque) Size() int {
35+
return len(q.l) + len(q.r)
36+
}
37+
38+
func (q *Deque) PushFront(v int) {
39+
q.l = append(q.l, v)
40+
}
41+
42+
func (q *Deque) PushBack(v int) {
43+
q.r = append(q.r, v)
44+
}
45+
46+
func (q *Deque) PopFront() (v int) {
47+
if len(q.l) > 0 {
48+
q.l, v = q.l[:len(q.l)-1], q.l[len(q.l)-1]
49+
} else {
50+
v, q.r = q.r[0], q.r[1:]
51+
}
52+
return
53+
}
54+
55+
func (q *Deque) PopBack() (v int) {
56+
if len(q.r) > 0 {
57+
q.r, v = q.r[:len(q.r)-1], q.r[len(q.r)-1]
58+
} else {
59+
v, q.l = q.l[0], q.l[1:]
60+
}
61+
return
62+
}
63+
64+
func (q Deque) Front() int {
65+
if len(q.l) > 0 {
66+
return q.l[len(q.l)-1]
67+
}
68+
return q.r[0]
69+
}
70+
71+
func (q Deque) Back() int {
72+
if len(q.r) > 0 {
73+
return q.r[len(q.r)-1]
74+
}
75+
return q.l[0]
76+
}
77+
78+
func (q Deque) Get(i int) int {
79+
if i < len(q.l) {
80+
return q.l[len(q.l)-1-i]
81+
}
82+
return q.r[i-len(q.l)]
83+
}

0 commit comments

Comments
 (0)