63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package top100liked
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
// https://leetcode.cn/problems/daily-temperatures/?envType=study-plan-v2&envId=top-100-liked
|
|
|
|
func dailyTemperatures(temperatures []int) []int {
|
|
res := make([]int, len(temperatures))
|
|
stack := make([]int, 0, len(temperatures))
|
|
|
|
for i := len(temperatures) - 1; i >= 0; i-- {
|
|
for len(stack) > 0 && temperatures[stack[len(stack)-1]] <= temperatures[i] {
|
|
stack = stack[:len(stack)-1]
|
|
}
|
|
if len(stack) > 0 {
|
|
res[i] = stack[len(stack)-1] - i
|
|
}
|
|
stack = append(stack, i)
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
// func dailyTemperatures(temperatures []int) []int {
|
|
// type item struct {
|
|
// Idx int
|
|
// Temp int
|
|
// }
|
|
// stack := []item{}
|
|
// res := make([]int, len(temperatures))
|
|
// for i := len(temperatures) - 1; i >= 0; i-- {
|
|
// cur := temperatures[i]
|
|
// if len(stack) == 0 {
|
|
// stack = append(stack, item{i, cur})
|
|
// res[i] = 0
|
|
// } else {
|
|
// for {
|
|
// if len(stack) == 0 {
|
|
// stack = append(stack, item{i, cur})
|
|
// res[i] = 0
|
|
// break
|
|
// }
|
|
// top := stack[len(stack)-1]
|
|
// if cur < top.Temp {
|
|
// res[i] = top.Idx - i
|
|
// stack = append(stack, item{i, cur})
|
|
// break
|
|
// } else {
|
|
// stack = stack[:len(stack)-1] // pop
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// return res
|
|
// }
|
|
|
|
func Test(t *testing.T) {
|
|
fmt.Printf("%+v", dailyTemperatures([]int{73, 74, 75, 71, 69, 72, 76, 73}))
|
|
}
|