0%

LeetCode-1438

题目

结果

代码

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
func longestSubarray(nums []int, limit int) int {
cnt := make(map[int]int)
cnt[nums[0]]++
minN, maxN := nums[0], nums[0]
maxLen := 0
for ptr1, ptr2 := 0, 0; ; {
if maxN-minN <= limit {
maxLen = max(maxLen, ptr2-ptr1+1)
ptr2++
if ptr2 >= len(nums) {
break
}
cnt[nums[ptr2]]++
minN = min(minN, nums[ptr2])
maxN = max(maxN, nums[ptr2])
} else {
if (nums[ptr1] == maxN && cnt[maxN] == 1) || (nums[ptr1] == minN && cnt[minN] == 1) {
minN, maxN = nums[ptr1+1], nums[ptr1+1]
for i := ptr1 + 1; i <= ptr2; i++ {
maxN = max(maxN, nums[i])
minN = min(minN, nums[i])
}
}
ptr1++
if ptr1 >= len(nums) {
break
}
cnt[nums[ptr1-1]]--
}
}
return maxLen
}

func max(x, y int) int {
if x > y {
return x
}
return y
}

func min(x, y int) int {
if x > y {
return y
}
return x
}