-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSolution.go
69 lines (64 loc) · 937 Bytes
/
Solution.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package Solution
import "math"
func Solution(nums []int) int {
start, end, min, max := 0, -1, math.MaxInt32, math.MinInt32
for i, j := 0, len(nums)-1; i < len(nums); i, j = i+1, j-1 {
if nums[i] >= max {
max = nums[i]
} else {
end = i
}
if nums[j] <= min {
min = nums[j]
} else {
start = j
}
}
return end - start + 1
}
func Solution2(nums []int) int {
n := len(nums)
if n < 2 {
return 0
}
l, r := 0, n-1
for l < n-1 {
if nums[l] > nums[l+1] {
break
}
l++
}
for r > 0 {
if nums[r] < nums[r-1] {
break
}
r--
}
if l >= r {
return 0
}
mi, ma := math.MaxInt32, math.MinInt32
for i := l; i <= r; i++ {
mi = min(mi, nums[i])
ma = max(ma, nums[i])
}
for l >= 0 && mi < nums[l] {
l--
}
for r < n && ma > nums[r] {
r++
}
return r - l - 1
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func max(a, b int) int {
if a > b {
return a
}
return b
}