Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f62d6b7

Browse files
committed
feat: monotonic stack for 739 daily temperatures
1 parent e6c78e2 commit f62d6b7

File tree

4 files changed

+77
-0
lines changed

4 files changed

+77
-0
lines changed

‎src/739_dailyTemperatures/algo.go‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package algo
2+
3+
func dailyTemperatures(temperatures []int) []int {
4+
result := make([]int, len(temperatures))
5+
stack := [][]int{}
6+
7+
for i := len(temperatures) - 1; i >= 0; i-- {
8+
if len(stack) == 0 || temperatures[i] >= stack[len(stack)-1][0] {
9+
for len(stack) > 0 && temperatures[i] >= stack[len(stack)-1][0] {
10+
stack = stack[:len(stack)-1]
11+
}
12+
if len(stack) == 0 {
13+
result[i] = 0
14+
} else {
15+
result[i] = stack[len(stack)-1][1] - i
16+
}
17+
} else {
18+
result[i] = stack[len(stack)-1][1] - i
19+
}
20+
21+
stack = append(stack, []int{temperatures[i], i})
22+
}
23+
return result
24+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package algo
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestDailyTemperatures1(t *testing.T) {
11+
actual := dailyTemperatures([]int{73, 74, 75, 71, 69, 72, 76, 73})
12+
fmt.Println("actual: ", actual)
13+
assert.Equal(t, []int{1, 1, 4, 2, 1, 1, 0, 0}, actual)
14+
}
15+
16+
func TestDailyTemperatures2(t *testing.T) {
17+
actual := dailyTemperatures([]int{30, 40, 50, 60})
18+
fmt.Println("actual: ", actual)
19+
assert.Equal(t, []int{1, 1, 1, 0}, actual)
20+
}
21+
22+
func TestDailyTemperatures3(t *testing.T) {
23+
actual := dailyTemperatures([]int{30})
24+
fmt.Println("actual: ", actual)
25+
assert.Equal(t, []int{0}, actual)
26+
}
27+
28+
func TestDailyTemperatures4(t *testing.T) {
29+
actual := dailyTemperatures([]int{3, 2, 1})
30+
fmt.Println("actual: ", actual)
31+
assert.Equal(t, []int{0, 0, 0}, actual)
32+
}

‎src/739_dailyTemperatures/go.mod‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module algo
2+
3+
go 1.18
4+
5+
require github.com/stretchr/testify v1.8.4
6+
7+
require (
8+
github.com/davecgh/go-spew v1.1.1 // indirect
9+
github.com/pmezard/go-difflib v1.0.0 // indirect
10+
gopkg.in/yaml.v3 v3.0.1 // indirect
11+
)

‎src/739_dailyTemperatures/go.sum‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
6+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
7+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
8+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
9+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
10+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /